XGlucHV0IHRleGluZm8gQGMgLSotIHRleGluZm8gLSotCkBjICUqKnN0YXJ0IG9mIGhlYWRlcgpAc2V0ZmlsZW5hbWUgcWVtdS1kb2MuaW5mbwpAc2V0dGl0bGUgUUVNVSBFbXVsYXRvciBVc2VyIERvY3VtZW50YXRpb24KQGV4YW1wbGVpbmRlbnQgMApAcGFyYWdyYXBoaW5kZW50IDAKQGMgJSoqZW5kIG9mIGhlYWRlcgoKQGlmdGV4CkB0aXRsZXBhZ2UKQHNwIDcKQGNlbnRlciBAdGl0bGVmb250e1FFTVUgRW11bGF0b3J9CkBzcCAxCkBjZW50ZXIgQHRpdGxlZm9udHtVc2VyIERvY3VtZW50YXRpb259CkBzcCAzCkBlbmQgdGl0bGVwYWdlCkBlbmQgaWZ0ZXgKCkBpZm5vdHRleApAbm9kZSBUb3AKQHRvcAoKQG1lbnUKKiBJbnRyb2R1Y3Rpb246OgoqIEluc3RhbGxhdGlvbjo6CiogUUVNVSBQQyBTeXN0ZW0gZW11bGF0b3I6OgoqIFFFTVUgU3lzdGVtIGVtdWxhdG9yIGZvciBub24gUEMgdGFyZ2V0czo6CiogUUVNVSBVc2VyIHNwYWNlIGVtdWxhdG9yOjoKKiBjb21waWxhdGlvbjo6IENvbXBpbGF0aW9uIGZyb20gdGhlIHNvdXJjZXMKKiBJbmRleDo6CkBlbmQgbWVudQpAZW5kIGlmbm90dGV4CgpAY29udGVudHMKCkBub2RlIEludHJvZHVjdGlvbgpAY2hhcHRlciBJbnRyb2R1Y3Rpb24KCkBtZW51CiogaW50cm9fZmVhdHVyZXM6OiBGZWF0dXJlcwpAZW5kIG1lbnUKCkBub2RlIGludHJvX2ZlYXR1cmVzCkBzZWN0aW9uIEZlYXR1cmVzCgpRRU1VIGlzIGEgRkFTVCEgcHJvY2Vzc29yIGVtdWxhdG9yIHVzaW5nIGR5bmFtaWMgdHJhbnNsYXRpb24gdG8KYWNoaWV2ZSBnb29kIGVtdWxhdGlvbiBzcGVlZC4KClFFTVUgaGFzIHR3byBvcGVyYXRpbmcgbW9kZXM6CgpAaXRlbWl6ZSBAbWludXMKCkBpdGVtCkZ1bGwgc3lzdGVtIGVtdWxhdGlvbi4gSW4gdGhpcyBtb2RlLCBRRU1VIGVtdWxhdGVzIGEgZnVsbCBzeXN0ZW0gKGZvcgpleGFtcGxlIGEgUEMpLCBpbmNsdWRpbmcgb25lIG9yIHNldmVyYWwgcHJvY2Vzc29ycyBhbmQgdmFyaW91cwpwZXJpcGhlcmFscy4gSXQgY2FuIGJlIHVzZWQgdG8gbGF1bmNoIGRpZmZlcmVudCBPcGVyYXRpbmcgU3lzdGVtcwp3aXRob3V0IHJlYm9vdGluZyB0aGUgUEMgb3IgdG8gZGVidWcgc3lzdGVtIGNvZGUuCgpAaXRlbQpVc2VyIG1vZGUgZW11bGF0aW9uLiBJbiB0aGlzIG1vZGUsIFFFTVUgY2FuIGxhdW5jaApwcm9jZXNzZXMgY29tcGlsZWQgZm9yIG9uZSBDUFUgb24gYW5vdGhlciBDUFUuIEl0IGNhbiBiZSB1c2VkIHRvCmxhdW5jaCB0aGUgV2luZSBXaW5kb3dzIEFQSSBlbXVsYXRvciAoQHVybHtodHRwOi8vd3d3LndpbmVocS5vcmd9KSBvcgp0byBlYXNlIGNyb3NzLWNvbXBpbGF0aW9uIGFuZCBjcm9zcy1kZWJ1Z2dpbmcuCgpAZW5kIGl0ZW1pemUKClFFTVUgY2FuIHJ1biB3aXRob3V0IGFuIGhvc3Qga2VybmVsIGRyaXZlciBhbmQgeWV0IGdpdmVzIGFjY2VwdGFibGUKcGVyZm9ybWFuY2UuCgpGb3Igc3lzdGVtIGVtdWxhdGlvbiwgdGhlIGZvbGxvd2luZyBoYXJkd2FyZSB0YXJnZXRzIGFyZSBzdXBwb3J0ZWQ6CkBpdGVtaXplCkBpdGVtIFBDICh4ODYgb3IgeDg2XzY0IHByb2Nlc3NvcikKQGl0ZW0gSVNBIFBDIChvbGQgc3R5bGUgUEMgd2l0aG91dCBQQ0kgYnVzKQpAaXRlbSBQUkVQIChQb3dlclBDIHByb2Nlc3NvcikKQGl0ZW0gRzMgQmVpZ2UgUG93ZXJNYWMgKFBvd2VyUEMgcHJvY2Vzc29yKQpAaXRlbSBNYWM5OSBQb3dlck1hYyAoUG93ZXJQQyBwcm9jZXNzb3IsIGluIHByb2dyZXNzKQpAaXRlbSBTdW40bS9TdW40Yy9TdW40ZCAoMzItYml0IFNwYXJjIHByb2Nlc3NvcikKQGl0ZW0gU3VuNHUvU3VuNHYgKDY0LWJpdCBTcGFyYyBwcm9jZXNzb3IsIGluIHByb2dyZXNzKQpAaXRlbSBNYWx0YSBib2FyZCAoMzItYml0IGFuZCA2NC1iaXQgTUlQUyBwcm9jZXNzb3JzKQpAaXRlbSBNSVBTIE1hZ251bSAoNjQtYml0IE1JUFMgcHJvY2Vzc29yKQpAaXRlbSBBUk0gSW50ZWdyYXRvci9DUCAoQVJNKQpAaXRlbSBBUk0gVmVyc2F0aWxlIGJhc2Vib2FyZCAoQVJNKQpAaXRlbSBBUk0gUmVhbFZpZXcgRW11bGF0aW9uIGJhc2Vib2FyZCAoQVJNKQpAaXRlbSBTcGl0eiwgQWtpdGEsIEJvcnpvaSwgVGVycmllciBhbmQgVG9zYSBQREFzIChQWEEyNzAgcHJvY2Vzc29yKQpAaXRlbSBMdW1pbmFyeSBNaWNybyBMTTNTODExRVZCIChBUk0gQ29ydGV4LU0zKQpAaXRlbSBMdW1pbmFyeSBNaWNybyBMTTNTNjk2NUVWQiAoQVJNIENvcnRleC1NMykKQGl0ZW0gRnJlZXNjYWxlIE1DRjUyMDhFVkIgKENvbGRGaXJlIFYyKS4KQGl0ZW0gQXJuZXdzaCBNQ0Y1MjA2IGV2YWx1YXRpb24gYm9hcmQgKENvbGRGaXJlIFYyKS4KQGl0ZW0gUGFsbSBUdW5nc3RlbnxFIFBEQSAoT01BUDMxMCBwcm9jZXNzb3IpCkBpdGVtIE44MDAgYW5kIE44MTAgdGFibGV0cyAoT01BUDI0MjAgcHJvY2Vzc29yKQpAaXRlbSBNdXNpY1BhbCAoTVY4OFc4NjE4IEFSTSBwcm9jZXNzb3IpCkBpdGVtIEd1bXN0aXggIkNvbm5leCIgYW5kICJWZXJkZXgiIG1vdGhlcmJvYXJkcyAoUFhBMjU1LzI3MCkuCkBpdGVtIFNpZW1lbnMgU1gxIHNtYXJ0cGhvbmUgKE9NQVAzMTAgcHJvY2Vzc29yKQpAZW5kIGl0ZW1pemUKCkZvciB1c2VyIGVtdWxhdGlvbiwgeDg2LCBQb3dlclBDLCBBUk0sIDMyLWJpdCBNSVBTLCBTcGFyYzMyLzY0IGFuZCBDb2xkRmlyZShtNjhrKSBDUFVzIGFyZSBzdXBwb3J0ZWQuCgpAbm9kZSBJbnN0YWxsYXRpb24KQGNoYXB0ZXIgSW5zdGFsbGF0aW9uCgpJZiB5b3Ugd2FudCB0byBjb21waWxlIFFFTVUgeW91cnNlbGYsIHNlZSBAcmVme2NvbXBpbGF0aW9ufS4KCkBtZW51CiogaW5zdGFsbF9saW51eDo6ICAgTGludXgKKiBpbnN0YWxsX3dpbmRvd3M6OiBXaW5kb3dzCiogaW5zdGFsbF9tYWM6OiAgICAgTWFjaW50b3NoCkBlbmQgbWVudQoKQG5vZGUgaW5zdGFsbF9saW51eApAc2VjdGlvbiBMaW51eAoKSWYgYSBwcmVjb21waWxlZCBwYWNrYWdlIGlzIGF2YWlsYWJsZSBmb3IgeW91ciBkaXN0cmlidXRpb24gLSB5b3UganVzdApoYXZlIHRvIGluc3RhbGwgaXQuIE90aGVyd2lzZSwgc2VlIEByZWZ7Y29tcGlsYXRpb259LgoKQG5vZGUgaW5zdGFsbF93aW5kb3dzCkBzZWN0aW9uIFdpbmRvd3MKCkRvd25sb2FkIHRoZSBleHBlcmltZW50YWwgYmluYXJ5IGluc3RhbGxlciBhdApAdXJse2h0dHA6Ly93d3cuZnJlZS5vc3pvby5vcmcvQC9kb3dubG9hZC5odG1sfS4KCkBub2RlIGluc3RhbGxfbWFjCkBzZWN0aW9uIE1hYyBPUyBYCgpEb3dubG9hZCB0aGUgZXhwZXJpbWVudGFsIGJpbmFyeSBpbnN0YWxsZXIgYXQKQHVybHtodHRwOi8vd3d3LmZyZWUub3N6b28ub3JnL0AvZG93bmxvYWQuaHRtbH0uCgpAbm9kZSBRRU1VIFBDIFN5c3RlbSBlbXVsYXRvcgpAY2hhcHRlciBRRU1VIFBDIFN5c3RlbSBlbXVsYXRvcgoKQG1lbnUKKiBwY3N5c19pbnRyb2R1Y3Rpb246OiBJbnRyb2R1Y3Rpb24KKiBwY3N5c19xdWlja3N0YXJ0OjogICBRdWljayBTdGFydAoqIHNlY19pbnZvY2F0aW9uOjogICAgIEludm9jYXRpb24KKiBwY3N5c19rZXlzOjogICAgICAgICBLZXlzCiogcGNzeXNfbW9uaXRvcjo6ICAgICAgUUVNVSBNb25pdG9yCiogZGlza19pbWFnZXM6OiAgICAgICAgRGlzayBJbWFnZXMKKiBwY3N5c19uZXR3b3JrOjogICAgICBOZXR3b3JrIGVtdWxhdGlvbgoqIGRpcmVjdF9saW51eF9ib290OjogIERpcmVjdCBMaW51eCBCb290CiogcGNzeXNfdXNiOjogICAgICAgICAgVVNCIGVtdWxhdGlvbgoqIHZuY19zZWN1cml0eTo6ICAgICAgIFZOQyBzZWN1cml0eQoqIGdkYl91c2FnZTo6ICAgICAgICAgIEdEQiB1c2FnZQoqIHBjc3lzX29zX3NwZWNpZmljOjogIFRhcmdldCBPUyBzcGVjaWZpYyBpbmZvcm1hdGlvbgpAZW5kIG1lbnUKCkBub2RlIHBjc3lzX2ludHJvZHVjdGlvbgpAc2VjdGlvbiBJbnRyb2R1Y3Rpb24KCkBjIG1hbiBiZWdpbiBERVNDUklQVElPTgoKVGhlIFFFTVUgUEMgU3lzdGVtIGVtdWxhdG9yIHNpbXVsYXRlcyB0aGUKZm9sbG93aW5nIHBlcmlwaGVyYWxzOgoKQGl0ZW1pemUgQG1pbnVzCkBpdGVtCmk0NDBGWCBob3N0IFBDSSBicmlkZ2UgYW5kIFBJSVgzIFBDSSB0byBJU0EgYnJpZGdlCkBpdGVtCkNpcnJ1cyBDTEdEIDU0NDYgUENJIFZHQSBjYXJkIG9yIGR1bW15IFZHQSBjYXJkIHdpdGggQm9jaHMgVkVTQQpleHRlbnNpb25zIChoYXJkd2FyZSBsZXZlbCwgaW5jbHVkaW5nIGFsbCBub24gc3RhbmRhcmQgbW9kZXMpLgpAaXRlbQpQUy8yIG1vdXNlIGFuZCBrZXlib2FyZApAaXRlbQoyIFBDSSBJREUgaW50ZXJmYWNlcyB3aXRoIGhhcmQgZGlzayBhbmQgQ0QtUk9NIHN1cHBvcnQKQGl0ZW0KRmxvcHB5IGRpc2sKQGl0ZW0KUENJL0lTQSBQQ0kgbmV0d29yayBhZGFwdGVycwpAaXRlbQpTZXJpYWwgcG9ydHMKQGl0ZW0KQ3JlYXRpdmUgU291bmRCbGFzdGVyIDE2IHNvdW5kIGNhcmQKQGl0ZW0KRU5TT05JUSBBdWRpb1BDSSBFUzEzNzAgc291bmQgY2FyZApAaXRlbQpJbnRlbCA4MjgwMUFBIEFDOTcgQXVkaW8gY29tcGF0aWJsZSBzb3VuZCBjYXJkCkBpdGVtCkFkbGliKE9QTDIpIC0gWWFtYWhhIFlNMzgxMiBjb21wYXRpYmxlIGNoaXAKQGl0ZW0KR3JhdmlzIFVsdHJhc291bmQgR0YxIHNvdW5kIGNhcmQKQGl0ZW0KQ1M0MjMxQSBjb21wYXRpYmxlIHNvdW5kIGNhcmQKQGl0ZW0KUENJIFVIQ0kgVVNCIGNvbnRyb2xsZXIgYW5kIGEgdmlydHVhbCBVU0IgaHViLgpAZW5kIGl0ZW1pemUKClNNUCBpcyBzdXBwb3J0ZWQgd2l0aCB1cCB0byAyNTUgQ1BVcy4KCk5vdGUgdGhhdCBhZGxpYiwgZ3VzIGFuZCBjczQyMzFhIGFyZSBvbmx5IGF2YWlsYWJsZSB3aGVuIFFFTVUgd2FzCmNvbmZpZ3VyZWQgd2l0aCAtLWF1ZGlvLWNhcmQtbGlzdCBvcHRpb24gY29udGFpbmluZyB0aGUgbmFtZShzKSBvZgpyZXF1aXJlZCBjYXJkKHMpLgoKUUVNVSB1c2VzIHRoZSBQQyBCSU9TIGZyb20gdGhlIEJvY2hzIHByb2plY3QgYW5kIHRoZSBQbGV4ODYvQm9jaHMgTEdQTApWR0EgQklPUy4KClFFTVUgdXNlcyBZTTM4MTIgZW11bGF0aW9uIGJ5IFRhdHN1eXVraSBTYXRvaC4KClFFTVUgdXNlcyBHVVMgZW11bGF0aW9uKEdVU0VNVTMyIEB1cmx7aHR0cDovL3d3dy5kZWlubWVpc3Rlci5kZS9ndXNlbXUvfSkKYnkgVGlib3IgIlRTIiBTY2jDvHR6LgoKQ1M0MjMxQSBpcyB0aGUgY2hpcCB1c2VkIGluIFdpbmRvd3MgU291bmQgU3lzdGVtIGFuZCBHVVNNQVggcHJvZHVjdHMKCkBjIG1hbiBlbmQKCkBub2RlIHBjc3lzX3F1aWNrc3RhcnQKQHNlY3Rpb24gUXVpY2sgU3RhcnQKCkRvd25sb2FkIGFuZCB1bmNvbXByZXNzIHRoZSBsaW51eCBpbWFnZSAoQGZpbGV7bGludXguaW1nfSkgYW5kIHR5cGU6CgpAZXhhbXBsZQpxZW11IGxpbnV4LmltZwpAZW5kIGV4YW1wbGUKCkxpbnV4IHNob3VsZCBib290IGFuZCBnaXZlIHlvdSBhIHByb21wdC4KCkBub2RlIHNlY19pbnZvY2F0aW9uCkBzZWN0aW9uIEludm9jYXRpb24KCkBleGFtcGxlCkBjIG1hbiBiZWdpbiBTWU5PUFNJUwp1c2FnZTogcWVtdSBbb3B0aW9uc10gW0B2YXJ7ZGlza19pbWFnZX1dCkBjIG1hbiBlbmQKQGVuZCBleGFtcGxlCgpAYyBtYW4gYmVnaW4gT1BUSU9OUwpAdmFye2Rpc2tfaW1hZ2V9IGlzIGEgcmF3IGhhcmQgZGlzayBpbWFnZSBmb3IgSURFIGhhcmQgZGlzayAwLiBTb21lCnRhcmdldHMgZG8gbm90IG5lZWQgYSBkaXNrIGltYWdlLgoKQGluY2x1ZGUgcWVtdS1vcHRpb25zLnRleGkKCkBjIG1hbiBlbmQKCkBub2RlIHBjc3lzX2tleXMKQHNlY3Rpb24gS2V5cwoKQGMgbWFuIGJlZ2luIE9QVElPTlMKCkR1cmluZyB0aGUgZ3JhcGhpY2FsIGVtdWxhdGlvbiwgeW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZyBrZXlzOgpAdGFibGUgQGtleQpAaXRlbSBDdHJsLUFsdC1mClRvZ2dsZSBmdWxsIHNjcmVlbgoKQGl0ZW0gQ3RybC1BbHQtbgpTd2l0Y2ggdG8gdmlydHVhbCBjb25zb2xlICduJy4gU3RhbmRhcmQgY29uc29sZSBtYXBwaW5ncyBhcmU6CkB0YWJsZSBAZW1waApAaXRlbSAxClRhcmdldCBzeXN0ZW0gZGlzcGxheQpAaXRlbSAyCk1vbml0b3IKQGl0ZW0gMwpTZXJpYWwgcG9ydApAZW5kIHRhYmxlCgpAaXRlbSBDdHJsLUFsdApUb2dnbGUgbW91c2UgYW5kIGtleWJvYXJkIGdyYWIuCkBlbmQgdGFibGUKCkluIHRoZSB2aXJ0dWFsIGNvbnNvbGVzLCB5b3UgY2FuIHVzZSBAa2V5e0N0cmwtVXB9LCBAa2V5e0N0cmwtRG93bn0sCkBrZXl7Q3RybC1QYWdlVXB9IGFuZCBAa2V5e0N0cmwtUGFnZURvd259IHRvIG1vdmUgaW4gdGhlIGJhY2sgbG9nLgoKRHVyaW5nIGVtdWxhdGlvbiwgaWYgeW91IGFyZSB1c2luZyB0aGUgQG9wdGlvbnstbm9ncmFwaGljfSBvcHRpb24sIHVzZQpAa2V5e0N0cmwtYSBofSB0byBnZXQgdGVybWluYWwgY29tbWFuZHM6CgpAdGFibGUgQGtleQpAaXRlbSBDdHJsLWEgaApAaXRlbSBDdHJsLWEgPwpQcmludCB0aGlzIGhlbHAKQGl0ZW0gQ3RybC1hIHgKRXhpdCBlbXVsYXRvcgpAaXRlbSBDdHJsLWEgcwpTYXZlIGRpc2sgZGF0YSBiYWNrIHRvIGZpbGUgKGlmIC1zbmFwc2hvdCkKQGl0ZW0gQ3RybC1hIHQKVG9nZ2xlIGNvbnNvbGUgdGltZXN0YW1wcwpAaXRlbSBDdHJsLWEgYgpTZW5kIGJyZWFrIChtYWdpYyBzeXNycSBpbiBMaW51eCkKQGl0ZW0gQ3RybC1hIGMKU3dpdGNoIGJldHdlZW4gY29uc29sZSBhbmQgbW9uaXRvcgpAaXRlbSBDdHJsLWEgQ3RybC1hClNlbmQgQ3RybC1hCkBlbmQgdGFibGUKQGMgbWFuIGVuZAoKQGlnbm9yZQoKQGMgbWFuIGJlZ2luIFNFRUFMU08KVGhlIEhUTUwgZG9jdW1lbnRhdGlvbiBvZiBRRU1VIGZvciBtb3JlIHByZWNpc2UgaW5mb3JtYXRpb24gYW5kIExpbnV4CnVzZXIgbW9kZSBlbXVsYXRvciBpbnZvY2F0aW9uLgpAYyBtYW4gZW5kCgpAYyBtYW4gYmVnaW4gQVVUSE9SCkZhYnJpY2UgQmVsbGFyZApAYyBtYW4gZW5kCgpAZW5kIGlnbm9yZQoKQG5vZGUgcGNzeXNfbW9uaXRvcgpAc2VjdGlvbiBRRU1VIE1vbml0b3IKClRoZSBRRU1VIG1vbml0b3IgaXMgdXNlZCB0byBnaXZlIGNvbXBsZXggY29tbWFuZHMgdG8gdGhlIFFFTVUKZW11bGF0b3IuIFlvdSBjYW4gdXNlIGl0IHRvOgoKQGl0ZW1pemUgQG1pbnVzCgpAaXRlbQpSZW1vdmUgb3IgaW5zZXJ0IHJlbW92YWJsZSBtZWRpYSBpbWFnZXMKKHN1Y2ggYXMgQ0QtUk9NIG9yIGZsb3BwaWVzKS4KCkBpdGVtCkZyZWV6ZS91bmZyZWV6ZSB0aGUgVmlydHVhbCBNYWNoaW5lIChWTSkgYW5kIHNhdmUgb3IgcmVzdG9yZSBpdHMgc3RhdGUKZnJvbSBhIGRpc2sgZmlsZS4KCkBpdGVtIEluc3BlY3QgdGhlIFZNIHN0YXRlIHdpdGhvdXQgYW4gZXh0ZXJuYWwgZGVidWdnZXIuCgpAZW5kIGl0ZW1pemUKCkBzdWJzZWN0aW9uIENvbW1hbmRzCgpUaGUgZm9sbG93aW5nIGNvbW1hbmRzIGFyZSBhdmFpbGFibGU6CgpAdGFibGUgQG9wdGlvbgoKQGl0ZW0gaGVscCBvciA/IFtAdmFye2NtZH1dClNob3cgdGhlIGhlbHAgZm9yIGFsbCBjb21tYW5kcyBvciBqdXN0IGZvciBjb21tYW5kIEB2YXJ7Y21kfS4KCkBpdGVtIGNvbW1pdApDb21taXQgY2hhbmdlcyB0byB0aGUgZGlzayBpbWFnZXMgKGlmIC1zbmFwc2hvdCBpcyB1c2VkKS4KCkBpdGVtIGluZm8gQHZhcntzdWJjb21tYW5kfQpTaG93IHZhcmlvdXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHN5c3RlbSBzdGF0ZS4KCkB0YWJsZSBAb3B0aW9uCkBpdGVtIGluZm8gdmVyc2lvbgpzaG93IHRoZSB2ZXJzaW9uIG9mIFFFTVUKQGl0ZW0gaW5mbyBuZXR3b3JrCnNob3cgdGhlIHZhcmlvdXMgVkxBTnMgYW5kIHRoZSBhc3NvY2lhdGVkIGRldmljZXMKQGl0ZW0gaW5mbyBjaGFyZGV2CnNob3cgdGhlIGNoYXJhY3RlciBkZXZpY2VzCkBpdGVtIGluZm8gYmxvY2sKc2hvdyB0aGUgYmxvY2sgZGV2aWNlcwpAaXRlbSBpbmZvIGJsb2NrCnNob3cgYmxvY2sgZGV2aWNlIHN0YXRpc3RpY3MKQGl0ZW0gaW5mbyByZWdpc3RlcnMKc2hvdyB0aGUgY3B1IHJlZ2lzdGVycwpAaXRlbSBpbmZvIGNwdXMKc2hvdyBpbmZvcyBmb3IgZWFjaCBDUFUKQGl0ZW0gaW5mbyBoaXN0b3J5CnNob3cgdGhlIGNvbW1hbmQgbGluZSBoaXN0b3J5CkBpdGVtIGluZm8gaXJxCnNob3cgdGhlIGludGVycnVwdHMgc3RhdGlzdGljcyAoaWYgYXZhaWxhYmxlKQpAaXRlbSBpbmZvIHBpYwpzaG93IGk4MjU5IChQSUMpIHN0YXRlCkBpdGVtIGluZm8gcGNpCnNob3cgZW11bGF0ZWQgUENJIGRldmljZSBpbmZvCkBpdGVtIGluZm8gdGxiCnNob3cgdmlydHVhbCB0byBwaHlzaWNhbCBtZW1vcnkgbWFwcGluZ3MgKGkzODYgb25seSkKQGl0ZW0gaW5mbyBtZW0Kc2hvdyB0aGUgYWN0aXZlIHZpcnR1YWwgbWVtb3J5IG1hcHBpbmdzIChpMzg2IG9ubHkpCkBpdGVtIGluZm8gaHBldApzaG93IHN0YXRlIG9mIEhQRVQgKGkzODYgb25seSkKQGl0ZW0gaW5mbyBrcWVtdQpzaG93IEtRRU1VIGluZm9ybWF0aW9uCkBpdGVtIGluZm8ga3ZtCnNob3cgS1ZNIGluZm9ybWF0aW9uCkBpdGVtIGluZm8gdXNiCnNob3cgVVNCIGRldmljZXMgcGx1Z2dlZCBvbiB0aGUgdmlydHVhbCBVU0IgaHViCkBpdGVtIGluZm8gdXNiaG9zdApzaG93IGFsbCBVU0IgaG9zdCBkZXZpY2VzCkBpdGVtIGluZm8gcHJvZmlsZQpzaG93IHByb2ZpbGluZyBpbmZvcm1hdGlvbgpAaXRlbSBpbmZvIGNhcHR1cmUKc2hvdyBpbmZvcm1hdGlvbiBhYm91dCBhY3RpdmUgY2FwdHVyaW5nCkBpdGVtIGluZm8gc25hcHNob3RzCnNob3cgbGlzdCBvZiBWTSBzbmFwc2hvdHMKQGl0ZW0gaW5mbyBzdGF0dXMKc2hvdyB0aGUgY3VycmVudCBWTSBzdGF0dXMgKHJ1bm5pbmd8cGF1c2VkKQpAaXRlbSBpbmZvIHBjbWNpYQpzaG93IGd1ZXN0IFBDTUNJQSBzdGF0dXMKQGl0ZW0gaW5mbyBtaWNlCnNob3cgd2hpY2ggZ3Vlc3QgbW91c2UgaXMgcmVjZWl2aW5nIGV2ZW50cwpAaXRlbSBpbmZvIHZuYwpzaG93IHRoZSB2bmMgc2VydmVyIHN0YXR1cwpAaXRlbSBpbmZvIG5hbWUKc2hvdyB0aGUgY3VycmVudCBWTSBuYW1lCkBpdGVtIGluZm8gdXVpZApzaG93IHRoZSBjdXJyZW50IFZNIFVVSUQKQGl0ZW0gaW5mbyBjcHVzdGF0cwpzaG93IENQVSBzdGF0aXN0aWNzCkBpdGVtIGluZm8gc2xpcnAKc2hvdyBTTElSUCBzdGF0aXN0aWNzIChpZiBhdmFpbGFibGUpCkBpdGVtIGluZm8gbWlncmF0ZQpzaG93IG1pZ3JhdGlvbiBzdGF0dXMKQGl0ZW0gaW5mbyBiYWxsb29uCnNob3cgYmFsbG9vbiBpbmZvcm1hdGlvbgpAZW5kIHRhYmxlCgpAaXRlbSBxIG9yIHF1aXQKUXVpdCB0aGUgZW11bGF0b3IuCgpAaXRlbSBlamVjdCBbLWZdIEB2YXJ7ZGV2aWNlfQpFamVjdCBhIHJlbW92YWJsZSBtZWRpdW0gKHVzZSAtZiB0byBmb3JjZSBpdCkuCgpAaXRlbSBjaGFuZ2UgQHZhcntkZXZpY2V9IEB2YXJ7c2V0dGluZ30KCkNoYW5nZSB0aGUgY29uZmlndXJhdGlvbiBvZiBhIGRldmljZS4KCkB0YWJsZSBAb3B0aW9uCkBpdGVtIGNoYW5nZSBAdmFye2Rpc2tkZXZpY2V9IEB2YXJ7ZmlsZW5hbWV9IFtAdmFye2Zvcm1hdH1dCkNoYW5nZSB0aGUgbWVkaXVtIGZvciBhIHJlbW92YWJsZSBkaXNrIGRldmljZSB0byBwb2ludCB0byBAdmFye2ZpbGVuYW1lfS4gZWcKCkBleGFtcGxlCihxZW11KSBjaGFuZ2UgaWRlMS1jZDAgL3BhdGgvdG8vc29tZS5pc28KQGVuZCBleGFtcGxlCgpAdmFye2Zvcm1hdH0gaXMgb3B0aW9uYWwuCgpAaXRlbSBjaGFuZ2Ugdm5jIEB2YXJ7ZGlzcGxheX0sQHZhcntvcHRpb25zfQpDaGFuZ2UgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIFZOQyBzZXJ2ZXIuIFRoZSB2YWxpZCBzeW50YXggZm9yIEB2YXJ7ZGlzcGxheX0KYW5kIEB2YXJ7b3B0aW9uc30gYXJlIGRlc2NyaWJlZCBhdCBAcmVme3NlY19pbnZvY2F0aW9ufS4gZWcKCkBleGFtcGxlCihxZW11KSBjaGFuZ2Ugdm5jIGxvY2FsaG9zdDoxCkBlbmQgZXhhbXBsZQoKQGl0ZW0gY2hhbmdlIHZuYyBwYXNzd29yZCBbQHZhcntwYXNzd29yZH1dCgpDaGFuZ2UgdGhlIHBhc3N3b3JkIGFzc29jaWF0ZWQgd2l0aCB0aGUgVk5DIHNlcnZlci4gSWYgdGhlIG5ldyBwYXNzd29yZCBpcyBub3QKc3VwcGxpZWQsIHRoZSBtb25pdG9yIHdpbGwgcHJvbXB0IGZvciBpdCB0byBiZSBlbnRlcmVkLiBWTkMgcGFzc3dvcmRzIGFyZSBvbmx5CnNpZ25pZmljYW50IHVwIHRvIDggbGV0dGVycy4gZWcKCkBleGFtcGxlCihxZW11KSBjaGFuZ2Ugdm5jIHBhc3N3b3JkClBhc3N3b3JkOiAqKioqKioqKgpAZW5kIGV4YW1wbGUKCkBlbmQgdGFibGUKCkBpdGVtIGFjbCBAdmFye3N1YmNvbW1hbmR9IEB2YXJ7YWNsbmFtZX0gQHZhcnttYXRjaH0gQHZhcntpbmRleH0KCk1hbmFnZSBhY2Nlc3MgY29udHJvbCBsaXN0cyBmb3IgbmV0d29yayBzZXJ2aWNlcy4gVGhlcmUgYXJlIGN1cnJlbnRseQp0d28gbmFtZWQgYWNjZXNzIGNvbnRyb2wgbGlzdHMsIEB2YXJ7dm5jLng1MDlkbmFtZX0gYW5kIEB2YXJ7dm5jLnVzZXJuYW1lfQptYXRjaGluZyBvbiB0aGUgeDUwOSBjbGllbnQgY2VydGlmaWNhdGUgZGlzdGluZ3Vpc2hlZCBuYW1lLCBhbmQgU0FTTAp1c2VybmFtZSByZXNwZWN0aXZlbHkuCgpAdGFibGUgQG9wdGlvbgpAaXRlbSBhY2wgc2hvdyA8YWNsbmFtZT4KbGlzdCBhbGwgdGhlIG1hdGNoIHJ1bGVzIGluIHRoZSBhY2Nlc3MgY29udHJvbCBsaXN0LCBhbmQgdGhlIGRlZmF1bHQKcG9saWN5CkBpdGVtIGFjbCBwb2xpY3kgPGFjbG5hbWU+IEBjb2Rle2FsbG93fGRlbnl9CnNldCB0aGUgZGVmYXVsdCBhY2Nlc3MgY29udHJvbCBsaXN0IHBvbGljeSwgdXNlZCBpbiB0aGUgZXZlbnQgdGhhdApub25lIG9mIHRoZSBleHBsaWNpdCBydWxlcyBtYXRjaC4gVGhlIGRlZmF1bHQgcG9saWN5IGF0IHN0YXJ0dXAgaXMKYWx3YXlzIEBjb2Rle2Rlbnl9CkBpdGVtIGFjbCBhbGxvdyA8YWNsbmFtZT4gPG1hdGNoPiBbPGluZGV4Pl0KYWRkIGEgbWF0Y2ggdG8gdGhlIGFjY2VzcyBjb250cm9sIGxpc3QsIGFsbG93aW5nIGFjY2Vzcy4gVGhlIG1hdGNoIHdpbGwKbm9ybWFsbHkgYmUgYW4gZXhhY3QgdXNlcm5hbWUgb3IgeDUwOSBkaXN0aW5ndWlzaGVkIG5hbWUsIGJ1dCBjYW4Kb3B0aW9uYWxseSBpbmNsdWRlIHdpbGRjYXJkIGdsb2JzLiBlZyBAY29kZXsqQEBFWEFNUExFLkNPTX0gdG8gYWxsb3cKYWxsIHVzZXJzIGluIHRoZSBAY29kZXtFWEFNUExFLkNPTX0ga2VyYmVyb3MgcmVhbG0uIFRoZSBtYXRjaCB3aWxsCm5vcm1hbGx5IGJlIGFwcGVuZGVkIHRvIHRoZSBlbmQgb2YgdGhlIEFDTCwgYnV0IGNhbiBiZSBpbnNlcnRlZAplYXJsaWVyIGluIHRoZSBsaXN0IGlmIHRoZSBvcHRpb25hbCBAY29kZXtpbmRleH0gcGFyYW1ldGVyIGlzIHN1cHBsaWVkLgpAaXRlbSBhY2wgZGVueSA8YWNsbmFtZT4gPG1hdGNoPiBbPGluZGV4Pl0KYWRkIGEgbWF0Y2ggdG8gdGhlIGFjY2VzcyBjb250cm9sIGxpc3QsIGRlbnlpbmcgYWNjZXNzLiBUaGUgbWF0Y2ggd2lsbApub3JtYWxseSBiZSBhbiBleGFjdCB1c2VybmFtZSBvciB4NTA5IGRpc3Rpbmd1aXNoZWQgbmFtZSwgYnV0IGNhbgpvcHRpb25hbGx5IGluY2x1ZGUgd2lsZGNhcmQgZ2xvYnMuIGVnIEBjb2RleypAQEVYQU1QTEUuQ09NfSB0byBhbGxvdwphbGwgdXNlcnMgaW4gdGhlIEBjb2Rle0VYQU1QTEUuQ09NfSBrZXJiZXJvcyByZWFsbS4gVGhlIG1hdGNoIHdpbGwKbm9ybWFsbHkgYmUgYXBwZW5kZWQgdG8gdGhlIGVuZCBvZiB0aGUgQUNMLCBidXQgY2FuIGJlIGluc2VydGVkCmVhcmxpZXIgaW4gdGhlIGxpc3QgaWYgdGhlIG9wdGlvbmFsIEBjb2Rle2luZGV4fSBwYXJhbWV0ZXIgaXMgc3VwcGxpZWQuCkBpdGVtIGFjbCByZW1vdmUgPGFjbG5hbWU+IDxtYXRjaD4KcmVtb3ZlIHRoZSBzcGVjaWZpZWQgbWF0Y2ggcnVsZSBmcm9tIHRoZSBhY2Nlc3MgY29udHJvbCBsaXN0LgpAaXRlbSBhY2wgcmVzZXQgPGFjbG5hbWU+CnJlbW92ZSBhbGwgbWF0Y2hlcyBmcm9tIHRoZSBhY2Nlc3MgY29udHJvbCBsaXN0LCBhbmQgc2V0IHRoZSBkZWZhdWx0CnBvbGljeSBiYWNrIHRvIEBjb2Rle2Rlbnl9LgpAZW5kIHRhYmxlCgpAaXRlbSBzY3JlZW5kdW1wIEB2YXJ7ZmlsZW5hbWV9ClNhdmUgc2NyZWVuIGludG8gUFBNIGltYWdlIEB2YXJ7ZmlsZW5hbWV9LgoKQGl0ZW0gbG9nZmlsZSBAdmFye2ZpbGVuYW1lfQpPdXRwdXQgbG9ncyB0byBAdmFye2ZpbGVuYW1lfS4KCkBpdGVtIGxvZyBAdmFye2l0ZW0xfVssLi4uXQpBY3RpdmF0ZSBsb2dnaW5nIG9mIHRoZSBzcGVjaWZpZWQgaXRlbXMgdG8gQGZpbGV7L3RtcC9xZW11LmxvZ30uCgpAaXRlbSBzYXZldm0gW0B2YXJ7dGFnfXxAdmFye2lkfV0KQ3JlYXRlIGEgc25hcHNob3Qgb2YgdGhlIHdob2xlIHZpcnR1YWwgbWFjaGluZS4gSWYgQHZhcnt0YWd9IGlzCnByb3ZpZGVkLCBpdCBpcyB1c2VkIGFzIGh1bWFuIHJlYWRhYmxlIGlkZW50aWZpZXIuIElmIHRoZXJlIGlzIGFscmVhZHkKYSBzbmFwc2hvdCB3aXRoIHRoZSBzYW1lIHRhZyBvciBJRCwgaXQgaXMgcmVwbGFjZWQuIE1vcmUgaW5mbyBhdApAcmVme3ZtX3NuYXBzaG90c30uCgpAaXRlbSBsb2Fkdm0gQHZhcnt0YWd9fEB2YXJ7aWR9ClNldCB0aGUgd2hvbGUgdmlydHVhbCBtYWNoaW5lIHRvIHRoZSBzbmFwc2hvdCBpZGVudGlmaWVkIGJ5IHRoZSB0YWcKQHZhcnt0YWd9IG9yIHRoZSB1bmlxdWUgc25hcHNob3QgSUQgQHZhcntpZH0uCgpAaXRlbSBkZWx2bSBAdmFye3RhZ318QHZhcntpZH0KRGVsZXRlIHRoZSBzbmFwc2hvdCBpZGVudGlmaWVkIGJ5IEB2YXJ7dGFnfSBvciBAdmFye2lkfS4KCkBpdGVtIHN0b3AKU3RvcCBlbXVsYXRpb24uCgpAaXRlbSBjIG9yIGNvbnQKUmVzdW1lIGVtdWxhdGlvbi4KCkBpdGVtIGdkYnNlcnZlciBbQHZhcntwb3J0fV0KU3RhcnQgZ2Ric2VydmVyIHNlc3Npb24gKGRlZmF1bHQgQHZhcntwb3J0fT0xMjM0KQoKQGl0ZW0geC9mbXQgQHZhcnthZGRyfQpWaXJ0dWFsIG1lbW9yeSBkdW1wIHN0YXJ0aW5nIGF0IEB2YXJ7YWRkcn0uCgpAaXRlbSB4cCAvQHZhcntmbXR9IEB2YXJ7YWRkcn0KUGh5c2ljYWwgbWVtb3J5IGR1bXAgc3RhcnRpbmcgYXQgQHZhcnthZGRyfS4KCkB2YXJ7Zm10fSBpcyBhIGZvcm1hdCB3aGljaCB0ZWxscyB0aGUgY29tbWFuZCBob3cgdG8gZm9ybWF0IHRoZQpkYXRhLiBJdHMgc3ludGF4IGlzOiBAb3B0aW9uey9Ae2NvdW50QH1Ae2Zvcm1hdEB9QHtzaXplQH19CgpAdGFibGUgQHZhcgpAaXRlbSBjb3VudAppcyB0aGUgbnVtYmVyIG9mIGl0ZW1zIHRvIGJlIGR1bXBlZC4KCkBpdGVtIGZvcm1hdApjYW4gYmUgeCAoaGV4KSwgZCAoc2lnbmVkIGRlY2ltYWwpLCB1ICh1bnNpZ25lZCBkZWNpbWFsKSwgbyAob2N0YWwpLApjIChjaGFyKSBvciBpIChhc20gaW5zdHJ1Y3Rpb24pLgoKQGl0ZW0gc2l6ZQpjYW4gYmUgYiAoOCBiaXRzKSwgaCAoMTYgYml0cyksIHcgKDMyIGJpdHMpIG9yIGcgKDY0IGJpdHMpLiBPbiB4ODYsCkBjb2Rle2h9IG9yIEBjb2Rle3d9IGNhbiBiZSBzcGVjaWZpZWQgd2l0aCB0aGUgQGNvZGV7aX0gZm9ybWF0IHRvCnJlc3BlY3RpdmVseSBzZWxlY3QgMTYgb3IgMzIgYml0IGNvZGUgaW5zdHJ1Y3Rpb24gc2l6ZS4KCkBlbmQgdGFibGUKCkV4YW1wbGVzOgpAaXRlbWl6ZQpAaXRlbQpEdW1wIDEwIGluc3RydWN0aW9ucyBhdCB0aGUgY3VycmVudCBpbnN0cnVjdGlvbiBwb2ludGVyOgpAZXhhbXBsZQoocWVtdSkgeC8xMGkgJGVpcAoweDkwMTA3MDYzOiAgcmV0CjB4OTAxMDcwNjQ6ICBzdGkKMHg5MDEwNzA2NTogIGxlYSAgICAweDAoJWVzaSwxKSwlZXNpCjB4OTAxMDcwNjk6ICBsZWEgICAgMHgwKCVlZGksMSksJWVkaQoweDkwMTA3MDcwOiAgcmV0CjB4OTAxMDcwNzE6ICBqbXAgICAgMHg5MDEwNzA4MAoweDkwMTA3MDczOiAgbm9wCjB4OTAxMDcwNzQ6ICBub3AKMHg5MDEwNzA3NTogIG5vcAoweDkwMTA3MDc2OiAgbm9wCkBlbmQgZXhhbXBsZQoKQGl0ZW0KRHVtcCA4MCAxNiBiaXQgdmFsdWVzIGF0IHRoZSBzdGFydCBvZiB0aGUgdmlkZW8gbWVtb3J5LgpAc21hbGxleGFtcGxlCihxZW11KSB4cC84MGh4IDB4YjgwMDAKMHgwMDBiODAwMDogMHgwYjUwIDB4MGI2YyAweDBiNjUgMHgwYjc4IDB4MGIzOCAweDBiMzYgMHgwYjJmIDB4MGI0MgoweDAwMGI4MDEwOiAweDBiNmYgMHgwYjYzIDB4MGI2OCAweDBiNzMgMHgwYjIwIDB4MGI1NiAweDBiNDcgMHgwYjQxCjB4MDAwYjgwMjA6IDB4MGI0MiAweDBiNjkgMHgwYjZmIDB4MGI3MyAweDBiMjAgMHgwYjYzIDB4MGI3NSAweDBiNzIKMHgwMDBiODAzMDogMHgwYjcyIDB4MGI2NSAweDBiNmUgMHgwYjc0IDB4MGIyZCAweDBiNjMgMHgwYjc2IDB4MGI3MwoweDAwMGI4MDQwOiAweDBiMjAgMHgwYjMwIDB4MGIzNSAweDBiMjAgMHgwYjRlIDB4MGI2ZiAweDBiNzYgMHgwYjIwCjB4MDAwYjgwNTA6IDB4MGIzMiAweDBiMzAgMHgwYjMwIDB4MGIzMyAweDA3MjAgMHgwNzIwIDB4MDcyMCAweDA3MjAKMHgwMDBiODA2MDogMHgwNzIwIDB4MDcyMCAweDA3MjAgMHgwNzIwIDB4MDcyMCAweDA3MjAgMHgwNzIwIDB4MDcyMAoweDAwMGI4MDcwOiAweDA3MjAgMHgwNzIwIDB4MDcyMCAweDA3MjAgMHgwNzIwIDB4MDcyMCAweDA3MjAgMHgwNzIwCjB4MDAwYjgwODA6IDB4MDcyMCAweDA3MjAgMHgwNzIwIDB4MDcyMCAweDA3MjAgMHgwNzIwIDB4MDcyMCAweDA3MjAKMHgwMDBiODA5MDogMHgwNzIwIDB4MDcyMCAweDA3MjAgMHgwNzIwIDB4MDcyMCAweDA3MjAgMHgwNzIwIDB4MDcyMApAZW5kIHNtYWxsZXhhbXBsZQpAZW5kIGl0ZW1pemUKCkBpdGVtIHAgb3IgcHJpbnQvQHZhcntmbXR9IEB2YXJ7ZXhwcn0KClByaW50IGV4cHJlc3Npb24gdmFsdWUuIE9ubHkgdGhlIEB2YXJ7Zm9ybWF0fSBwYXJ0IG9mIEB2YXJ7Zm10fSBpcwp1c2VkLgoKQGl0ZW0gc2VuZGtleSBAdmFye2tleXN9CgpTZW5kIEB2YXJ7a2V5c30gdG8gdGhlIGVtdWxhdG9yLiBAdmFye2tleXN9IGNvdWxkIGJlIHRoZSBuYW1lIG9mIHRoZQprZXkgb3IgQGNvZGV7I30gZm9sbG93ZWQgYnkgdGhlIHJhdyB2YWx1ZSBpbiBlaXRoZXIgZGVjaW1hbCBvciBoZXhhZGVjaW1hbApmb3JtYXQuIFVzZSBAY29kZXstfSB0byBwcmVzcyBzZXZlcmFsIGtleXMgc2ltdWx0YW5lb3VzbHkuIEV4YW1wbGU6CkBleGFtcGxlCnNlbmRrZXkgY3RybC1hbHQtZjEKQGVuZCBleGFtcGxlCgpUaGlzIGNvbW1hbmQgaXMgdXNlZnVsIHRvIHNlbmQga2V5cyB0aGF0IHlvdXIgZ3JhcGhpY2FsIHVzZXIgaW50ZXJmYWNlCmludGVyY2VwdHMgYXQgbG93IGxldmVsLCBzdWNoIGFzIEBjb2Rle2N0cmwtYWx0LWYxfSBpbiBYIFdpbmRvdy4KCkBpdGVtIHN5c3RlbV9yZXNldAoKUmVzZXQgdGhlIHN5c3RlbS4KCkBpdGVtIHN5c3RlbV9wb3dlcmRvd24KClBvd2VyIGRvd24gdGhlIHN5c3RlbSAoaWYgc3VwcG9ydGVkKS4KCkBpdGVtIHN1bSBAdmFye2FkZHJ9IEB2YXJ7c2l6ZX0KCkNvbXB1dGUgdGhlIGNoZWNrc3VtIG9mIGEgbWVtb3J5IHJlZ2lvbi4KCkBpdGVtIHVzYl9hZGQgQHZhcntkZXZuYW1lfQoKQWRkIHRoZSBVU0IgZGV2aWNlIEB2YXJ7ZGV2bmFtZX0uICBGb3IgZGV0YWlscyBvZiBhdmFpbGFibGUgZGV2aWNlcyBzZWUKQHJlZnt1c2JfZGV2aWNlc30KCkBpdGVtIHVzYl9kZWwgQHZhcntkZXZuYW1lfQoKUmVtb3ZlIHRoZSBVU0IgZGV2aWNlIEB2YXJ7ZGV2bmFtZX0gZnJvbSB0aGUgUUVNVSB2aXJ0dWFsIFVTQgpodWIuIEB2YXJ7ZGV2bmFtZX0gaGFzIHRoZSBzeW50YXggQGNvZGV7YnVzLmFkZHJ9LiBVc2UgdGhlIG1vbml0b3IKY29tbWFuZCBAY29kZXtpbmZvIHVzYn0gdG8gc2VlIHRoZSBkZXZpY2VzIHlvdSBjYW4gcmVtb3ZlLgoKQGl0ZW0gbW91c2VfbW92ZSBAdmFye2R4fSBAdmFye2R5fSBbQHZhcntken1dCk1vdmUgdGhlIGFjdGl2ZSBtb3VzZSB0byB0aGUgc3BlY2lmaWVkIGNvb3JkaW5hdGVzIEB2YXJ7ZHh9IEB2YXJ7ZHl9CndpdGggb3B0aW9uYWwgc2Nyb2xsIGF4aXMgQHZhcntken0uCgpAaXRlbSBtb3VzZV9idXR0b24gQHZhcnt2YWx9CkNoYW5nZSB0aGUgYWN0aXZlIG1vdXNlIGJ1dHRvbiBzdGF0ZSBAdmFye3ZhbH0gKDE9TCwgMj1NLCA0PVIpLgoKQGl0ZW0gbW91c2Vfc2V0IEB2YXJ7aW5kZXh9ClNldCB3aGljaCBtb3VzZSBkZXZpY2UgcmVjZWl2ZXMgZXZlbnRzIGF0IGdpdmVuIEB2YXJ7aW5kZXh9LCBpbmRleApjYW4gYmUgb2J0YWluZWQgd2l0aApAZXhhbXBsZQppbmZvIG1pY2UKQGVuZCBleGFtcGxlCgpAaXRlbSB3YXZjYXB0dXJlIEB2YXJ7ZmlsZW5hbWV9IFtAdmFye2ZyZXF1ZW5jeX0gW0B2YXJ7Yml0c30gW0B2YXJ7Y2hhbm5lbHN9XV1dCkNhcHR1cmUgYXVkaW8gaW50byBAdmFye2ZpbGVuYW1lfS4gVXNpbmcgc2FtcGxlIHJhdGUgQHZhcntmcmVxdWVuY3l9CmJpdHMgcGVyIHNhbXBsZSBAdmFye2JpdHN9IGFuZCBudW1iZXIgb2YgY2hhbm5lbHMgQHZhcntjaGFubmVsc30uCgpEZWZhdWx0czoKQGl0ZW1pemUgQG1pbnVzCkBpdGVtIFNhbXBsZSByYXRlID0gNDQxMDAgSHogLSBDRCBxdWFsaXR5CkBpdGVtIEJpdHMgPSAxNgpAaXRlbSBOdW1iZXIgb2YgY2hhbm5lbHMgPSAyIC0gU3RlcmVvCkBlbmQgaXRlbWl6ZQoKQGl0ZW0gc3RvcGNhcHR1cmUgQHZhcntpbmRleH0KU3RvcCBjYXB0dXJlIHdpdGggYSBnaXZlbiBAdmFye2luZGV4fSwgaW5kZXggY2FuIGJlIG9idGFpbmVkIHdpdGgKQGV4YW1wbGUKaW5mbyBjYXB0dXJlCkBlbmQgZXhhbXBsZQoKQGl0ZW0gbWVtc2F2ZSBAdmFye2FkZHJ9IEB2YXJ7c2l6ZX0gQHZhcntmaWxlfQpzYXZlIHRvIGRpc2sgdmlydHVhbCBtZW1vcnkgZHVtcCBzdGFydGluZyBhdCBAdmFye2FkZHJ9IG9mIHNpemUgQHZhcntzaXplfS4KCkBpdGVtIHBtZW1zYXZlIEB2YXJ7YWRkcn0gQHZhcntzaXplfSBAdmFye2ZpbGV9CnNhdmUgdG8gZGlzayBwaHlzaWNhbCBtZW1vcnkgZHVtcCBzdGFydGluZyBhdCBAdmFye2FkZHJ9IG9mIHNpemUgQHZhcntzaXplfS4KCkBpdGVtIGJvb3Rfc2V0IEB2YXJ7Ym9vdGRldmljZWxpc3R9CgpEZWZpbmUgbmV3IHZhbHVlcyBmb3IgdGhlIGJvb3QgZGV2aWNlIGxpc3QuIFRob3NlIHZhbHVlcyB3aWxsIG92ZXJyaWRlCnRoZSB2YWx1ZXMgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUgdGhyb3VnaCB0aGUgQGNvZGV7LWJvb3R9IG9wdGlvbi4KClRoZSB2YWx1ZXMgdGhhdCBjYW4gYmUgc3BlY2lmaWVkIGhlcmUgZGVwZW5kIG9uIHRoZSBtYWNoaW5lIHR5cGUsIGJ1dCBhcmUKdGhlIHNhbWUgdGhhdCBjYW4gYmUgc3BlY2lmaWVkIGluIHRoZSBAY29kZXstYm9vdH0gY29tbWFuZCBsaW5lIG9wdGlvbi4KCkBpdGVtIG5taSBAdmFye2NwdX0KSW5qZWN0IGFuIE5NSSBvbiB0aGUgZ2l2ZW4gQ1BVLgoKQGl0ZW0gbWlncmF0ZSBbLWRdIEB2YXJ7dXJpfQpNaWdyYXRlIHRvIEB2YXJ7dXJpfSAodXNpbmcgLWQgdG8gbm90IHdhaXQgZm9yIGNvbXBsZXRpb24pLgoKQGl0ZW0gbWlncmF0ZV9jYW5jZWwKQ2FuY2VsIHRoZSBjdXJyZW50IFZNIG1pZ3JhdGlvbi4KCkBpdGVtIG1pZ3JhdGVfc2V0X3NwZWVkIEB2YXJ7dmFsdWV9ClNldCBtYXhpbXVtIHNwZWVkIHRvIEB2YXJ7dmFsdWV9IChpbiBieXRlcykgZm9yIG1pZ3JhdGlvbnMuCgpAaXRlbSBiYWxsb29uIEB2YXJ7dmFsdWV9ClJlcXVlc3QgVk0gdG8gY2hhbmdlIGl0cyBtZW1vcnkgYWxsb2NhdGlvbiB0byBAdmFye3ZhbHVlfSAoaW4gTUIpLgoKQGl0ZW0gc2V0X2xpbmsgQHZhcntuYW1lfSBbdXB8ZG93bl0KU2V0IGxpbmsgQHZhcntuYW1lfSB1cCBvciBkb3duLgoKQGVuZCB0YWJsZQoKQHN1YnNlY3Rpb24gSW50ZWdlciBleHByZXNzaW9ucwoKVGhlIG1vbml0b3IgdW5kZXJzdGFuZHMgaW50ZWdlcnMgZXhwcmVzc2lvbnMgZm9yIGV2ZXJ5IGludGVnZXIKYXJndW1lbnQuIFlvdSBjYW4gdXNlIHJlZ2lzdGVyIG5hbWVzIHRvIGdldCB0aGUgdmFsdWUgb2Ygc3BlY2lmaWNzCkNQVSByZWdpc3RlcnMgYnkgcHJlZml4aW5nIHRoZW0gd2l0aCBAZW1waHskfS4KCkBub2RlIGRpc2tfaW1hZ2VzCkBzZWN0aW9uIERpc2sgSW1hZ2VzCgpTaW5jZSB2ZXJzaW9uIDAuNi4xLCBRRU1VIHN1cHBvcnRzIG1hbnkgZGlzayBpbWFnZSBmb3JtYXRzLCBpbmNsdWRpbmcKZ3Jvd2FibGUgZGlzayBpbWFnZXMgKHRoZWlyIHNpemUgaW5jcmVhc2UgYXMgbm9uIGVtcHR5IHNlY3RvcnMgYXJlCndyaXR0ZW4pLCBjb21wcmVzc2VkIGFuZCBlbmNyeXB0ZWQgZGlzayBpbWFnZXMuIFZlcnNpb24gMC44LjMgYWRkZWQKdGhlIG5ldyBxY293MiBkaXNrIGltYWdlIGZvcm1hdCB3aGljaCBpcyBlc3NlbnRpYWwgdG8gc3VwcG9ydCBWTQpzbmFwc2hvdHMuCgpAbWVudQoqIGRpc2tfaW1hZ2VzX3F1aWNrc3RhcnQ6OiAgICBRdWljayBzdGFydCBmb3IgZGlzayBpbWFnZSBjcmVhdGlvbgoqIGRpc2tfaW1hZ2VzX3NuYXBzaG90X21vZGU6OiBTbmFwc2hvdCBtb2RlCiogdm1fc25hcHNob3RzOjogICAgICAgICAgICAgIFZNIHNuYXBzaG90cwoqIHFlbXVfaW1nX2ludm9jYXRpb246OiAgICAgICBxZW11LWltZyBJbnZvY2F0aW9uCiogcWVtdV9uYmRfaW52b2NhdGlvbjo6ICAgICAgIHFlbXUtbmJkIEludm9jYXRpb24KKiBob3N0X2RyaXZlczo6ICAgICAgICAgICAgICAgVXNpbmcgaG9zdCBkcml2ZXMKKiBkaXNrX2ltYWdlc19mYXRfaW1hZ2VzOjogICAgVmlydHVhbCBGQVQgZGlzayBpbWFnZXMKKiBkaXNrX2ltYWdlc19uYmQ6OiAgICAgICAgICAgTkJEIGFjY2VzcwpAZW5kIG1lbnUKCkBub2RlIGRpc2tfaW1hZ2VzX3F1aWNrc3RhcnQKQHN1YnNlY3Rpb24gUXVpY2sgc3RhcnQgZm9yIGRpc2sgaW1hZ2UgY3JlYXRpb24KCllvdSBjYW4gY3JlYXRlIGEgZGlzayBpbWFnZSB3aXRoIHRoZSBjb21tYW5kOgpAZXhhbXBsZQpxZW11LWltZyBjcmVhdGUgbXlpbWFnZS5pbWcgbXlzaXplCkBlbmQgZXhhbXBsZQp3aGVyZSBAdmFye215aW1hZ2UuaW1nfSBpcyB0aGUgZGlzayBpbWFnZSBmaWxlbmFtZSBhbmQgQHZhcntteXNpemV9IGlzIGl0cwpzaXplIGluIGtpbG9ieXRlcy4gWW91IGNhbiBhZGQgYW4gQGNvZGV7TX0gc3VmZml4IHRvIGdpdmUgdGhlIHNpemUgaW4KbWVnYWJ5dGVzIGFuZCBhIEBjb2Rle0d9IHN1ZmZpeCBmb3IgZ2lnYWJ5dGVzLgoKU2VlIEByZWZ7cWVtdV9pbWdfaW52b2NhdGlvbn0gZm9yIG1vcmUgaW5mb3JtYXRpb24uCgpAbm9kZSBkaXNrX2ltYWdlc19zbmFwc2hvdF9tb2RlCkBzdWJzZWN0aW9uIFNuYXBzaG90IG1vZGUKCklmIHlvdSB1c2UgdGhlIG9wdGlvbiBAb3B0aW9uey1zbmFwc2hvdH0sIGFsbCBkaXNrIGltYWdlcyBhcmUKY29uc2lkZXJlZCBhcyByZWFkIG9ubHkuIFdoZW4gc2VjdG9ycyBpbiB3cml0dGVuLCB0aGV5IGFyZSB3cml0dGVuIGluCmEgdGVtcG9yYXJ5IGZpbGUgY3JlYXRlZCBpbiBAZmlsZXsvdG1wfS4gWW91IGNhbiBob3dldmVyIGZvcmNlIHRoZQp3cml0ZSBiYWNrIHRvIHRoZSByYXcgZGlzayBpbWFnZXMgYnkgdXNpbmcgdGhlIEBjb2Rle2NvbW1pdH0gbW9uaXRvcgpjb21tYW5kIChvciBAa2V5e0MtYSBzfSBpbiB0aGUgc2VyaWFsIGNvbnNvbGUpLgoKQG5vZGUgdm1fc25hcHNob3RzCkBzdWJzZWN0aW9uIFZNIHNuYXBzaG90cwoKVk0gc25hcHNob3RzIGFyZSBzbmFwc2hvdHMgb2YgdGhlIGNvbXBsZXRlIHZpcnR1YWwgbWFjaGluZSBpbmNsdWRpbmcKQ1BVIHN0YXRlLCBSQU0sIGRldmljZSBzdGF0ZSBhbmQgdGhlIGNvbnRlbnQgb2YgYWxsIHRoZSB3cml0YWJsZQpkaXNrcy4gSW4gb3JkZXIgdG8gdXNlIFZNIHNuYXBzaG90cywgeW91IG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgbm9uCnJlbW92YWJsZSBhbmQgd3JpdGFibGUgYmxvY2sgZGV2aWNlIHVzaW5nIHRoZSBAY29kZXtxY293Mn0gZGlzayBpbWFnZQpmb3JtYXQuIE5vcm1hbGx5IHRoaXMgZGV2aWNlIGlzIHRoZSBmaXJzdCB2aXJ0dWFsIGhhcmQgZHJpdmUuCgpVc2UgdGhlIG1vbml0b3IgY29tbWFuZCBAY29kZXtzYXZldm19IHRvIGNyZWF0ZSBhIG5ldyBWTSBzbmFwc2hvdCBvcgpyZXBsYWNlIGFuIGV4aXN0aW5nIG9uZS4gQSBodW1hbiByZWFkYWJsZSBuYW1lIGNhbiBiZSBhc3NpZ25lZCB0byBlYWNoCnNuYXBzaG90IGluIGFkZGl0aW9uIHRvIGl0cyBudW1lcmljYWwgSUQuCgpVc2UgQGNvZGV7bG9hZHZtfSB0byByZXN0b3JlIGEgVk0gc25hcHNob3QgYW5kIEBjb2Rle2RlbHZtfSB0byByZW1vdmUKYSBWTSBzbmFwc2hvdC4gQGNvZGV7aW5mbyBzbmFwc2hvdHN9IGxpc3RzIHRoZSBhdmFpbGFibGUgc25hcHNob3RzCndpdGggdGhlaXIgYXNzb2NpYXRlZCBpbmZvcm1hdGlvbjoKCkBleGFtcGxlCihxZW11KSBpbmZvIHNuYXBzaG90cwpTbmFwc2hvdCBkZXZpY2VzOiBoZGEKU25hcHNob3QgbGlzdCAoZnJvbSBoZGEpOgpJRCAgICAgICAgVEFHICAgICAgICAgICAgICAgICBWTSBTSVpFICAgICAgICAgICAgICAgIERBVEUgICAgICAgVk0gQ0xPQ0sKMSAgICAgICAgIHN0YXJ0ICAgICAgICAgICAgICAgICAgIDQxTSAyMDA2LTA4LTA2IDEyOjM4OjAyICAgMDA6MDA6MTQuOTU0CjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ME0gMjAwNi0wOC0wNiAxMjo0MzoyOSAgIDAwOjAwOjE4LjYzMwozICAgICAgICAgbXN5cyAgICAgICAgICAgICAgICAgICAgNDBNIDIwMDYtMDgtMDYgMTI6NDQ6MDQgICAwMDowMDoyMy41MTQKQGVuZCBleGFtcGxlCgpBIFZNIHNuYXBzaG90IGlzIG1hZGUgb2YgYSBWTSBzdGF0ZSBpbmZvIChpdHMgc2l6ZSBpcyBzaG93biBpbgpAY29kZXtpbmZvIHNuYXBzaG90c30pIGFuZCBhIHNuYXBzaG90IG9mIGV2ZXJ5IHdyaXRhYmxlIGRpc2sgaW1hZ2UuClRoZSBWTSBzdGF0ZSBpbmZvIGlzIHN0b3JlZCBpbiB0aGUgZmlyc3QgQGNvZGV7cWNvdzJ9IG5vbiByZW1vdmFibGUKYW5kIHdyaXRhYmxlIGJsb2NrIGRldmljZS4gVGhlIGRpc2sgaW1hZ2Ugc25hcHNob3RzIGFyZSBzdG9yZWQgaW4KZXZlcnkgZGlzayBpbWFnZS4gVGhlIHNpemUgb2YgYSBzbmFwc2hvdCBpbiBhIGRpc2sgaW1hZ2UgaXMgZGlmZmljdWx0CnRvIGV2YWx1YXRlIGFuZCBpcyBub3Qgc2hvd24gYnkgQGNvZGV7aW5mbyBzbmFwc2hvdHN9IGJlY2F1c2UgdGhlCmFzc29jaWF0ZWQgZGlzayBzZWN0b3JzIGFyZSBzaGFyZWQgYW1vbmcgYWxsIHRoZSBzbmFwc2hvdHMgdG8gc2F2ZQpkaXNrIHNwYWNlIChvdGhlcndpc2UgZWFjaCBzbmFwc2hvdCB3b3VsZCBuZWVkIGEgZnVsbCBjb3B5IG9mIGFsbCB0aGUKZGlzayBpbWFnZXMpLgoKV2hlbiB1c2luZyB0aGUgKHVucmVsYXRlZCkgQGNvZGV7LXNuYXBzaG90fSBvcHRpb24KKEByZWZ7ZGlza19pbWFnZXNfc25hcHNob3RfbW9kZX0pLCB5b3UgY2FuIGFsd2F5cyBtYWtlIFZNIHNuYXBzaG90cywKYnV0IHRoZXkgYXJlIGRlbGV0ZWQgYXMgc29vbiBhcyB5b3UgZXhpdCBRRU1VLgoKVk0gc25hcHNob3RzIGN1cnJlbnRseSBoYXZlIHRoZSBmb2xsb3dpbmcga25vd24gbGltaXRhdGlvbnM6CkBpdGVtaXplCkBpdGVtClRoZXkgY2Fubm90IGNvcGUgd2l0aCByZW1vdmFibGUgZGV2aWNlcyBpZiB0aGV5IGFyZSByZW1vdmVkIG9yCmluc2VydGVkIGFmdGVyIGEgc25hcHNob3QgaXMgZG9uZS4KQGl0ZW0KQSBmZXcgZGV2aWNlIGRyaXZlcnMgc3RpbGwgaGF2ZSBpbmNvbXBsZXRlIHNuYXBzaG90IHN1cHBvcnQgc28gdGhlaXIKc3RhdGUgaXMgbm90IHNhdmVkIG9yIHJlc3RvcmVkIHByb3Blcmx5IChpbiBwYXJ0aWN1bGFyIFVTQikuCkBlbmQgaXRlbWl6ZQoKQG5vZGUgcWVtdV9pbWdfaW52b2NhdGlvbgpAc3Vic2VjdGlvbiBAY29kZXtxZW11LWltZ30gSW52b2NhdGlvbgoKQGluY2x1ZGUgcWVtdS1pbWcudGV4aQoKQG5vZGUgcWVtdV9uYmRfaW52b2NhdGlvbgpAc3Vic2VjdGlvbiBAY29kZXtxZW11LW5iZH0gSW52b2NhdGlvbgoKQGluY2x1ZGUgcWVtdS1uYmQudGV4aQoKQG5vZGUgaG9zdF9kcml2ZXMKQHN1YnNlY3Rpb24gVXNpbmcgaG9zdCBkcml2ZXMKCkluIGFkZGl0aW9uIHRvIGRpc2sgaW1hZ2UgZmlsZXMsIFFFTVUgY2FuIGRpcmVjdGx5IGFjY2VzcyBob3N0CmRldmljZXMuIFdlIGRlc2NyaWJlIGhlcmUgdGhlIHVzYWdlIGZvciBRRU1VIHZlcnNpb24gPj0gMC44LjMuCgpAc3Vic3Vic2VjdGlvbiBMaW51eAoKT24gTGludXgsIHlvdSBjYW4gZGlyZWN0bHkgdXNlIHRoZSBob3N0IGRldmljZSBmaWxlbmFtZSBpbnN0ZWFkIG9mIGEKZGlzayBpbWFnZSBmaWxlbmFtZSBwcm92aWRlZCB5b3UgaGF2ZSBlbm91Z2ggcHJpdmlsZWdlcyB0byBhY2Nlc3MKaXQuIEZvciBleGFtcGxlLCB1c2UgQGZpbGV7L2Rldi9jZHJvbX0gdG8gYWNjZXNzIHRvIHRoZSBDRFJPTSBvcgpAZmlsZXsvZGV2L2ZkMH0gZm9yIHRoZSBmbG9wcHkuCgpAdGFibGUgQGNvZGUKQGl0ZW0gQ0QKWW91IGNhbiBzcGVjaWZ5IGEgQ0RST00gZGV2aWNlIGV2ZW4gaWYgbm8gQ0RST00gaXMgbG9hZGVkLiBRRU1VIGhhcwpzcGVjaWZpYyBjb2RlIHRvIGRldGVjdCBDRFJPTSBpbnNlcnRpb24gb3IgcmVtb3ZhbC4gQ0RST00gZWplY3Rpb24gYnkKdGhlIGd1ZXN0IE9TIGlzIHN1cHBvcnRlZC4gQ3VycmVudGx5IG9ubHkgZGF0YSBDRHMgYXJlIHN1cHBvcnRlZC4KQGl0ZW0gRmxvcHB5CllvdSBjYW4gc3BlY2lmeSBhIGZsb3BweSBkZXZpY2UgZXZlbiBpZiBubyBmbG9wcHkgaXMgbG9hZGVkLiBGbG9wcHkKcmVtb3ZhbCBpcyBjdXJyZW50bHkgbm90IGRldGVjdGVkIGFjY3VyYXRlbHkgKGlmIHlvdSBjaGFuZ2UgZmxvcHB5CndpdGhvdXQgZG9pbmcgZmxvcHB5IGFjY2VzcyB3aGlsZSB0aGUgZmxvcHB5IGlzIG5vdCBsb2FkZWQsIHRoZSBndWVzdApPUyB3aWxsIHRoaW5rIHRoYXQgdGhlIHNhbWUgZmxvcHB5IGlzIGxvYWRlZCkuCkBpdGVtIEhhcmQgZGlza3MKSGFyZCBkaXNrcyBjYW4gYmUgdXNlZC4gTm9ybWFsbHkgeW91IG11c3Qgc3BlY2lmeSB0aGUgd2hvbGUgZGlzawooQGZpbGV7L2Rldi9oZGJ9IGluc3RlYWQgb2YgQGZpbGV7L2Rldi9oZGIxfSkgc28gdGhhdCB0aGUgZ3Vlc3QgT1MgY2FuCnNlZSBpdCBhcyBhIHBhcnRpdGlvbmVkIGRpc2suIFdBUk5JTkc6IHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBkbywgaXQKaXMgYmV0dGVyIHRvIG9ubHkgbWFrZSBSRUFELU9OTFkgYWNjZXNzZXMgdG8gdGhlIGhhcmQgZGlzayBvdGhlcndpc2UKeW91IG1heSBjb3JydXB0IHlvdXIgaG9zdCBkYXRhICh1c2UgdGhlIEBvcHRpb257LXNuYXBzaG90fSBjb21tYW5kCmxpbmUgb3B0aW9uIG9yIG1vZGlmeSB0aGUgZGV2aWNlIHBlcm1pc3Npb25zIGFjY29yZGluZ2x5KS4KQGVuZCB0YWJsZQoKQHN1YnN1YnNlY3Rpb24gV2luZG93cwoKQHRhYmxlIEBjb2RlCkBpdGVtIENEClRoZSBwcmVmZXJyZWQgc3ludGF4IGlzIHRoZSBkcml2ZSBsZXR0ZXIgKGUuZy4gQGZpbGV7ZDp9KS4gVGhlCmFsdGVybmF0ZSBzeW50YXggQGZpbGV7XFwuXGQ6fSBpcyBzdXBwb3J0ZWQuIEBmaWxley9kZXYvY2Ryb219IGlzCnN1cHBvcnRlZCBhcyBhbiBhbGlhcyB0byB0aGUgZmlyc3QgQ0RST00gZHJpdmUuCgpDdXJyZW50bHkgdGhlcmUgaXMgbm8gc3BlY2lmaWMgY29kZSB0byBoYW5kbGUgcmVtb3ZhYmxlIG1lZGlhLCBzbyBpdAppcyBiZXR0ZXIgdG8gdXNlIHRoZSBAY29kZXtjaGFuZ2V9IG9yIEBjb2Rle2VqZWN0fSBtb25pdG9yIGNvbW1hbmRzIHRvCmNoYW5nZSBvciBlamVjdCBtZWRpYS4KQGl0ZW0gSGFyZCBkaXNrcwpIYXJkIGRpc2tzIGNhbiBiZSB1c2VkIHdpdGggdGhlIHN5bnRheDogQGZpbGV7XFwuXFBoeXNpY2FsRHJpdmVAdmFye059fQp3aGVyZSBAdmFye059IGlzIHRoZSBkcml2ZSBudW1iZXIgKDAgaXMgdGhlIGZpcnN0IGhhcmQgZGlzaykuCgpXQVJOSU5HOiB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgZG8sIGl0IGlzIGJldHRlciB0byBvbmx5IG1ha2UKUkVBRC1PTkxZIGFjY2Vzc2VzIHRvIHRoZSBoYXJkIGRpc2sgb3RoZXJ3aXNlIHlvdSBtYXkgY29ycnVwdCB5b3VyCmhvc3QgZGF0YSAodXNlIHRoZSBAb3B0aW9uey1zbmFwc2hvdH0gY29tbWFuZCBsaW5lIHNvIHRoYXQgdGhlCm1vZGlmaWNhdGlvbnMgYXJlIHdyaXR0ZW4gaW4gYSB0ZW1wb3JhcnkgZmlsZSkuCkBlbmQgdGFibGUKCgpAc3Vic3Vic2VjdGlvbiBNYWMgT1MgWAoKQGZpbGV7L2Rldi9jZHJvbX0gaXMgYW4gYWxpYXMgdG8gdGhlIGZpcnN0IENEUk9NLgoKQ3VycmVudGx5IHRoZXJlIGlzIG5vIHNwZWNpZmljIGNvZGUgdG8gaGFuZGxlIHJlbW92YWJsZSBtZWRpYSwgc28gaXQKaXMgYmV0dGVyIHRvIHVzZSB0aGUgQGNvZGV7Y2hhbmdlfSBvciBAY29kZXtlamVjdH0gbW9uaXRvciBjb21tYW5kcyB0bwpjaGFuZ2Ugb3IgZWplY3QgbWVkaWEuCgpAbm9kZSBkaXNrX2ltYWdlc19mYXRfaW1hZ2VzCkBzdWJzZWN0aW9uIFZpcnR1YWwgRkFUIGRpc2sgaW1hZ2VzCgpRRU1VIGNhbiBhdXRvbWF0aWNhbGx5IGNyZWF0ZSBhIHZpcnR1YWwgRkFUIGRpc2sgaW1hZ2UgZnJvbSBhCmRpcmVjdG9yeSB0cmVlLiBJbiBvcmRlciB0byB1c2UgaXQsIGp1c3QgdHlwZToKCkBleGFtcGxlCnFlbXUgbGludXguaW1nIC1oZGIgZmF0Oi9teV9kaXJlY3RvcnkKQGVuZCBleGFtcGxlCgpUaGVuIHlvdSBhY2Nlc3MgYWNjZXNzIHRvIGFsbCB0aGUgZmlsZXMgaW4gdGhlIEBmaWxley9teV9kaXJlY3Rvcnl9CmRpcmVjdG9yeSB3aXRob3V0IGhhdmluZyB0byBjb3B5IHRoZW0gaW4gYSBkaXNrIGltYWdlIG9yIHRvIGV4cG9ydAp0aGVtIHZpYSBTQU1CQSBvciBORlMuIFRoZSBkZWZhdWx0IGFjY2VzcyBpcyBAZW1waHtyZWFkLW9ubHl9LgoKRmxvcHBpZXMgY2FuIGJlIGVtdWxhdGVkIHdpdGggdGhlIEBjb2RlezpmbG9wcHk6fSBvcHRpb246CgpAZXhhbXBsZQpxZW11IGxpbnV4LmltZyAtZmRhIGZhdDpmbG9wcHk6L215X2RpcmVjdG9yeQpAZW5kIGV4YW1wbGUKCkEgcmVhZC93cml0ZSBzdXBwb3J0IGlzIGF2YWlsYWJsZSBmb3IgdGVzdGluZyAoYmV0YSBzdGFnZSkgd2l0aCB0aGUKQGNvZGV7OnJ3On0gb3B0aW9uOgoKQGV4YW1wbGUKcWVtdSBsaW51eC5pbWcgLWZkYSBmYXQ6ZmxvcHB5OnJ3Oi9teV9kaXJlY3RvcnkKQGVuZCBleGFtcGxlCgpXaGF0IHlvdSBzaG91bGQgQGVtcGh7bmV2ZXJ9IGRvOgpAaXRlbWl6ZQpAaXRlbSB1c2Ugbm9uLUFTQ0lJIGZpbGVuYW1lcyA7CkBpdGVtIHVzZSAiLXNuYXBzaG90IiB0b2dldGhlciB3aXRoICI6cnc6IiA7CkBpdGVtIGV4cGVjdCBpdCB0byB3b3JrIHdoZW4gbG9hZHZtJ2luZyA7CkBpdGVtIHdyaXRlIHRvIHRoZSBGQVQgZGlyZWN0b3J5IG9uIHRoZSBob3N0IHN5c3RlbSB3aGlsZSBhY2Nlc3NpbmcgaXQgd2l0aCB0aGUgZ3Vlc3Qgc3lzdGVtLgpAZW5kIGl0ZW1pemUKCkBub2RlIGRpc2tfaW1hZ2VzX25iZApAc3Vic2VjdGlvbiBOQkQgYWNjZXNzCgpRRU1VIGNhbiBhY2Nlc3MgZGlyZWN0bHkgdG8gYmxvY2sgZGV2aWNlIGV4cG9ydGVkIHVzaW5nIHRoZSBOZXR3b3JrIEJsb2NrIERldmljZQpwcm90b2NvbC4KCkBleGFtcGxlCnFlbXUgbGludXguaW1nIC1oZGIgbmJkOm15X25iZF9zZXJ2ZXIubXlkb21haW4ub3JnOjEwMjQKQGVuZCBleGFtcGxlCgpJZiB0aGUgTkJEIHNlcnZlciBpcyBsb2NhdGVkIG9uIHRoZSBzYW1lIGhvc3QsIHlvdSBjYW4gdXNlIGFuIHVuaXggc29ja2V0IGluc3RlYWQKb2YgYW4gaW5ldCBzb2NrZXQ6CgpAZXhhbXBsZQpxZW11IGxpbnV4LmltZyAtaGRiIG5iZDp1bml4Oi90bXAvbXlfc29ja2V0CkBlbmQgZXhhbXBsZQoKSW4gdGhpcyBjYXNlLCB0aGUgYmxvY2sgZGV2aWNlIG11c3QgYmUgZXhwb3J0ZWQgdXNpbmcgcWVtdS1uYmQ6CgpAZXhhbXBsZQpxZW11LW5iZCAtLXNvY2tldD0vdG1wL215X3NvY2tldCBteV9kaXNrLnFjb3cyCkBlbmQgZXhhbXBsZQoKVGhlIHVzZSBvZiBxZW11LW5iZCBhbGxvd3MgdG8gc2hhcmUgYSBkaXNrIGJldHdlZW4gc2V2ZXJhbCBndWVzdHM6CkBleGFtcGxlCnFlbXUtbmJkIC0tc29ja2V0PS90bXAvbXlfc29ja2V0IC0tc2hhcmU9MiBteV9kaXNrLnFjb3cyCkBlbmQgZXhhbXBsZQoKYW5kIHRoZW4geW91IGNhbiB1c2UgaXQgd2l0aCB0d28gZ3Vlc3RzOgpAZXhhbXBsZQpxZW11IGxpbnV4MS5pbWcgLWhkYiBuYmQ6dW5peDovdG1wL215X3NvY2tldApxZW11IGxpbnV4Mi5pbWcgLWhkYiBuYmQ6dW5peDovdG1wL215X3NvY2tldApAZW5kIGV4YW1wbGUKCkBub2RlIHBjc3lzX25ldHdvcmsKQHNlY3Rpb24gTmV0d29yayBlbXVsYXRpb24KClFFTVUgY2FuIHNpbXVsYXRlIHNldmVyYWwgbmV0d29yayBjYXJkcyAoUENJIG9yIElTQSBjYXJkcyBvbiB0aGUgUEMKdGFyZ2V0KSBhbmQgY2FuIGNvbm5lY3QgdGhlbSB0byBhbiBhcmJpdHJhcnkgbnVtYmVyIG9mIFZpcnR1YWwgTG9jYWwKQXJlYSBOZXR3b3JrcyAoVkxBTnMpLiBIb3N0IFRBUCBkZXZpY2VzIGNhbiBiZSBjb25uZWN0ZWQgdG8gYW55IFFFTVUKVkxBTi4gVkxBTiBjYW4gYmUgY29ubmVjdGVkIGJldHdlZW4gc2VwYXJhdGUgaW5zdGFuY2VzIG9mIFFFTVUgdG8Kc2ltdWxhdGUgbGFyZ2UgbmV0d29ya3MuIEZvciBzaW1wbGVyIHVzYWdlLCBhIG5vbiBwcml2aWxlZ2VkIHVzZXIgbW9kZQpuZXR3b3JrIHN0YWNrIGNhbiByZXBsYWNlIHRoZSBUQVAgZGV2aWNlIHRvIGhhdmUgYSBiYXNpYyBuZXR3b3JrCmNvbm5lY3Rpb24uCgpAc3Vic2VjdGlvbiBWTEFOcwoKUUVNVSBzaW11bGF0ZXMgc2V2ZXJhbCBWTEFOcy4gQSBWTEFOIGNhbiBiZSBzeW1ib2xpc2VkIGFzIGEgdmlydHVhbApjb25uZWN0aW9uIGJldHdlZW4gc2V2ZXJhbCBuZXR3b3JrIGRldmljZXMuIFRoZXNlIGRldmljZXMgY2FuIGJlIGZvcgpleGFtcGxlIFFFTVUgdmlydHVhbCBFdGhlcm5ldCBjYXJkcyBvciB2aXJ0dWFsIEhvc3QgZXRoZXJuZXQgZGV2aWNlcwooVEFQIGRldmljZXMpLgoKQHN1YnNlY3Rpb24gVXNpbmcgVEFQIG5ldHdvcmsgaW50ZXJmYWNlcwoKVGhpcyBpcyB0aGUgc3RhbmRhcmQgd2F5IHRvIGNvbm5lY3QgUUVNVSB0byBhIHJlYWwgbmV0d29yay4gUUVNVSBhZGRzCmEgdmlydHVhbCBuZXR3b3JrIGRldmljZSBvbiB5b3VyIGhvc3QgKGNhbGxlZCBAY29kZXt0YXBOfSksIGFuZCB5b3UKY2FuIHRoZW4gY29uZmlndXJlIGl0IGFzIGlmIGl0IHdhcyBhIHJlYWwgZXRoZXJuZXQgY2FyZC4KCkBzdWJzdWJzZWN0aW9uIExpbnV4IGhvc3QKCkFzIGFuIGV4YW1wbGUsIHlvdSBjYW4gZG93bmxvYWQgdGhlIEBmaWxle2xpbnV4LXRlc3QteHh4LnRhci5nen0KYXJjaGl2ZSBhbmQgY29weSB0aGUgc2NyaXB0IEBmaWxle3FlbXUtaWZ1cH0gaW4gQGZpbGV7L2V0Y30gYW5kCmNvbmZpZ3VyZSBwcm9wZXJseSBAY29kZXtzdWRvfSBzbyB0aGF0IHRoZSBjb21tYW5kIEBjb2Rle2lmY29uZmlnfQpjb250YWluZWQgaW4gQGZpbGV7cWVtdS1pZnVwfSBjYW4gYmUgZXhlY3V0ZWQgYXMgcm9vdC4gWW91IG11c3QgdmVyaWZ5CnRoYXQgeW91ciBob3N0IGtlcm5lbCBzdXBwb3J0cyB0aGUgVEFQIG5ldHdvcmsgaW50ZXJmYWNlczogdGhlCmRldmljZSBAZmlsZXsvZGV2L25ldC90dW59IG11c3QgYmUgcHJlc2VudC4KClNlZSBAcmVme3NlY19pbnZvY2F0aW9ufSB0byBoYXZlIGV4YW1wbGVzIG9mIGNvbW1hbmQgbGluZXMgdXNpbmcgdGhlClRBUCBuZXR3b3JrIGludGVyZmFjZXMuCgpAc3Vic3Vic2VjdGlvbiBXaW5kb3dzIGhvc3QKClRoZXJlIGlzIGEgdmlydHVhbCBldGhlcm5ldCBkcml2ZXIgZm9yIFdpbmRvd3MgMjAwMC9YUCBzeXN0ZW1zLCBjYWxsZWQKVEFQLVdpbjMyLiBCdXQgaXQgaXMgbm90IGluY2x1ZGVkIGluIHN0YW5kYXJkIFFFTVUgZm9yIFdpbmRvd3MsCnNvIHlvdSB3aWxsIG5lZWQgdG8gZ2V0IGl0IHNlcGFyYXRlbHkuIEl0IGlzIHBhcnQgb2YgT3BlblZQTiBwYWNrYWdlLApzbyBkb3dubG9hZCBPcGVuVlBOIGZyb20gOiBAdXJse2h0dHA6Ly9vcGVudnBuLm5ldC99LgoKQHN1YnNlY3Rpb24gVXNpbmcgdGhlIHVzZXIgbW9kZSBuZXR3b3JrIHN0YWNrCgpCeSB1c2luZyB0aGUgb3B0aW9uIEBvcHRpb257LW5ldCB1c2VyfSAoZGVmYXVsdCBjb25maWd1cmF0aW9uIGlmIG5vCkBvcHRpb257LW5ldH0gb3B0aW9uIGlzIHNwZWNpZmllZCksIFFFTVUgdXNlcyBhIGNvbXBsZXRlbHkgdXNlciBtb2RlCm5ldHdvcmsgc3RhY2sgKHlvdSBkb24ndCBuZWVkIHJvb3QgcHJpdmlsZWdlIHRvIHVzZSB0aGUgdmlydHVhbApuZXR3b3JrKS4gVGhlIHZpcnR1YWwgbmV0d29yayBjb25maWd1cmF0aW9uIGlzIHRoZSBmb2xsb3dpbmc6CgpAZXhhbXBsZQoKICAgICAgICAgUUVNVSBWTEFOICAgICAgPC0tLS0tLT4gIEZpcmV3YWxsL0RIQ1Agc2VydmVyIDwtLS0tLT4gSW50ZXJuZXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAoMTAuMC4yLjIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLT4gIEROUyBzZXJ2ZXIgKDEwLjAuMi4zKQogICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tLS0+ICBTTUIgc2VydmVyICgxMC4wLjIuNCkKQGVuZCBleGFtcGxlCgpUaGUgUUVNVSBWTSBiZWhhdmVzIGFzIGlmIGl0IHdhcyBiZWhpbmQgYSBmaXJld2FsbCB3aGljaCBibG9ja3MgYWxsCmluY29taW5nIGNvbm5lY3Rpb25zLiBZb3UgY2FuIHVzZSBhIERIQ1AgY2xpZW50IHRvIGF1dG9tYXRpY2FsbHkKY29uZmlndXJlIHRoZSBuZXR3b3JrIGluIHRoZSBRRU1VIFZNLiBUaGUgREhDUCBzZXJ2ZXIgYXNzaWduIGFkZHJlc3Nlcwp0byB0aGUgaG9zdHMgc3RhcnRpbmcgZnJvbSAxMC4wLjIuMTUuCgpJbiBvcmRlciB0byBjaGVjayB0aGF0IHRoZSB1c2VyIG1vZGUgbmV0d29yayBpcyB3b3JraW5nLCB5b3UgY2FuIHBpbmcKdGhlIGFkZHJlc3MgMTAuMC4yLjIgYW5kIHZlcmlmeSB0aGF0IHlvdSBnb3QgYW4gYWRkcmVzcyBpbiB0aGUgcmFuZ2UKMTAuMC4yLnggZnJvbSB0aGUgUUVNVSB2aXJ0dWFsIERIQ1Agc2VydmVyLgoKTm90ZSB0aGF0IEBjb2Rle3Bpbmd9IGlzIG5vdCBzdXBwb3J0ZWQgcmVsaWFibHkgdG8gdGhlIGludGVybmV0IGFzIGl0CndvdWxkIHJlcXVpcmUgcm9vdCBwcml2aWxlZ2VzLiBJdCBtZWFucyB5b3UgY2FuIG9ubHkgcGluZyB0aGUgbG9jYWwKcm91dGVyICgxMC4wLjIuMikuCgpXaGVuIHVzaW5nIHRoZSBidWlsdC1pbiBURlRQIHNlcnZlciwgdGhlIHJvdXRlciBpcyBhbHNvIHRoZSBURlRQCnNlcnZlci4KCldoZW4gdXNpbmcgdGhlIEBvcHRpb257LXJlZGlyfSBvcHRpb24sIFRDUCBvciBVRFAgY29ubmVjdGlvbnMgY2FuIGJlCnJlZGlyZWN0ZWQgZnJvbSB0aGUgaG9zdCB0byB0aGUgZ3Vlc3QuIEl0IGFsbG93cyBmb3IgZXhhbXBsZSB0bwpyZWRpcmVjdCBYMTEsIHRlbG5ldCBvciBTU0ggY29ubmVjdGlvbnMuCgpAc3Vic2VjdGlvbiBDb25uZWN0aW5nIFZMQU5zIGJldHdlZW4gUUVNVSBpbnN0YW5jZXMKClVzaW5nIHRoZSBAb3B0aW9uey1uZXQgc29ja2V0fSBvcHRpb24sIGl0IGlzIHBvc3NpYmxlIHRvIG1ha2UgVkxBTnMKdGhhdCBzcGFuIHNldmVyYWwgUUVNVSBpbnN0YW5jZXMuIFNlZSBAcmVme3NlY19pbnZvY2F0aW9ufSB0byBoYXZlIGEKYmFzaWMgZXhhbXBsZS4KCkBub2RlIGRpcmVjdF9saW51eF9ib290CkBzZWN0aW9uIERpcmVjdCBMaW51eCBCb290CgpUaGlzIHNlY3Rpb24gZXhwbGFpbnMgaG93IHRvIGxhdW5jaCBhIExpbnV4IGtlcm5lbCBpbnNpZGUgUUVNVSB3aXRob3V0CmhhdmluZyB0byBtYWtlIGEgZnVsbCBib290YWJsZSBpbWFnZS4gSXQgaXMgdmVyeSB1c2VmdWwgZm9yIGZhc3QgTGludXgKa2VybmVsIHRlc3RpbmcuCgpUaGUgc3ludGF4IGlzOgpAZXhhbXBsZQpxZW11IC1rZXJuZWwgYXJjaC9pMzg2L2Jvb3QvYnpJbWFnZSAtaGRhIHJvb3QtMi40LjIwLmltZyAtYXBwZW5kICJyb290PS9kZXYvaGRhIgpAZW5kIGV4YW1wbGUKClVzZSBAb3B0aW9uey1rZXJuZWx9IHRvIHByb3ZpZGUgdGhlIExpbnV4IGtlcm5lbCBpbWFnZSBhbmQKQG9wdGlvbnstYXBwZW5kfSB0byBnaXZlIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4gVGhlCkBvcHRpb257LWluaXRyZH0gb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHByb3ZpZGUgYW4gSU5JVFJEIGltYWdlLgoKV2hlbiB1c2luZyB0aGUgZGlyZWN0IExpbnV4IGJvb3QsIGEgZGlzayBpbWFnZSBmb3IgdGhlIGZpcnN0IGhhcmQgZGlzawpAZmlsZXtoZGF9IGlzIHJlcXVpcmVkIGJlY2F1c2UgaXRzIGJvb3Qgc2VjdG9yIGlzIHVzZWQgdG8gbGF1bmNoIHRoZQpMaW51eCBrZXJuZWwuCgpJZiB5b3UgZG8gbm90IG5lZWQgZ3JhcGhpY2FsIG91dHB1dCwgeW91IGNhbiBkaXNhYmxlIGl0IGFuZCByZWRpcmVjdAp0aGUgdmlydHVhbCBzZXJpYWwgcG9ydCBhbmQgdGhlIFFFTVUgbW9uaXRvciB0byB0aGUgY29uc29sZSB3aXRoIHRoZQpAb3B0aW9uey1ub2dyYXBoaWN9IG9wdGlvbi4gVGhlIHR5cGljYWwgY29tbWFuZCBsaW5lIGlzOgpAZXhhbXBsZQpxZW11IC1rZXJuZWwgYXJjaC9pMzg2L2Jvb3QvYnpJbWFnZSAtaGRhIHJvb3QtMi40LjIwLmltZyBcCiAgICAgLWFwcGVuZCAicm9vdD0vZGV2L2hkYSBjb25zb2xlPXR0eVMwIiAtbm9ncmFwaGljCkBlbmQgZXhhbXBsZQoKVXNlIEBrZXl7Q3RybC1hIGN9IHRvIHN3aXRjaCBiZXR3ZWVuIHRoZSBzZXJpYWwgY29uc29sZSBhbmQgdGhlCm1vbml0b3IgKEBweHJlZntwY3N5c19rZXlzfSkuCgpAbm9kZSBwY3N5c191c2IKQHNlY3Rpb24gVVNCIGVtdWxhdGlvbgoKUUVNVSBlbXVsYXRlcyBhIFBDSSBVSENJIFVTQiBjb250cm9sbGVyLiBZb3UgY2FuIHZpcnR1YWxseSBwbHVnCnZpcnR1YWwgVVNCIGRldmljZXMgb3IgcmVhbCBob3N0IFVTQiBkZXZpY2VzIChleHBlcmltZW50YWwsIHdvcmtzIG9ubHkKb24gTGludXggaG9zdHMpLiAgUWVtdSB3aWxsIGF1dG9tYXRpY2FsbHkgY3JlYXRlIGFuZCBjb25uZWN0IHZpcnR1YWwgVVNCIGh1YnMKYXMgbmVjZXNzYXJ5IHRvIGNvbm5lY3QgbXVsdGlwbGUgVVNCIGRldmljZXMuCgpAbWVudQoqIHVzYl9kZXZpY2VzOjoKKiBob3N0X3VzYl9kZXZpY2VzOjoKQGVuZCBtZW51CkBub2RlIHVzYl9kZXZpY2VzCkBzdWJzZWN0aW9uIENvbm5lY3RpbmcgVVNCIGRldmljZXMKClVTQiBkZXZpY2VzIGNhbiBiZSBjb25uZWN0ZWQgd2l0aCB0aGUgQG9wdGlvbnstdXNiZGV2aWNlfSBjb21tYW5kbGluZSBvcHRpb24Kb3IgdGhlIEBjb2Rle3VzYl9hZGR9IG1vbml0b3IgY29tbWFuZC4gIEF2YWlsYWJsZSBkZXZpY2VzIGFyZToKCkB0YWJsZSBAY29kZQpAaXRlbSBtb3VzZQpWaXJ0dWFsIE1vdXNlLiAgVGhpcyB3aWxsIG92ZXJyaWRlIHRoZSBQUy8yIG1vdXNlIGVtdWxhdGlvbiB3aGVuIGFjdGl2YXRlZC4KQGl0ZW0gdGFibGV0ClBvaW50ZXIgZGV2aWNlIHRoYXQgdXNlcyBhYnNvbHV0ZSBjb29yZGluYXRlcyAobGlrZSBhIHRvdWNoc2NyZWVuKS4KVGhpcyBtZWFucyBxZW11IGlzIGFibGUgdG8gcmVwb3J0IHRoZSBtb3VzZSBwb3NpdGlvbiB3aXRob3V0IGhhdmluZwp0byBncmFiIHRoZSBtb3VzZS4gIEFsc28gb3ZlcnJpZGVzIHRoZSBQUy8yIG1vdXNlIGVtdWxhdGlvbiB3aGVuIGFjdGl2YXRlZC4KQGl0ZW0gZGlzazpAdmFye2ZpbGV9Ck1hc3Mgc3RvcmFnZSBkZXZpY2UgYmFzZWQgb24gQHZhcntmaWxlfSAoQHB4cmVme2Rpc2tfaW1hZ2VzfSkKQGl0ZW0gaG9zdDpAdmFye2J1cy5hZGRyfQpQYXNzIHRocm91Z2ggdGhlIGhvc3QgZGV2aWNlIGlkZW50aWZpZWQgYnkgQHZhcntidXMuYWRkcn0KKExpbnV4IG9ubHkpCkBpdGVtIGhvc3Q6QHZhcnt2ZW5kb3JfaWQ6cHJvZHVjdF9pZH0KUGFzcyB0aHJvdWdoIHRoZSBob3N0IGRldmljZSBpZGVudGlmaWVkIGJ5IEB2YXJ7dmVuZG9yX2lkOnByb2R1Y3RfaWR9CihMaW51eCBvbmx5KQpAaXRlbSB3YWNvbS10YWJsZXQKVmlydHVhbCBXYWNvbSBQZW5QYXJ0bmVyIHRhYmxldC4gIFRoaXMgZGV2aWNlIGlzIHNpbWlsYXIgdG8gdGhlIEBjb2Rle3RhYmxldH0KYWJvdmUgYnV0IGl0IGNhbiBiZSB1c2VkIHdpdGggdGhlIHRzbGliIGxpYnJhcnkgYmVjYXVzZSBpbiBhZGRpdGlvbiB0byB0b3VjaApjb29yZGluYXRlcyBpdCByZXBvcnRzIHRvdWNoIHByZXNzdXJlLgpAaXRlbSBrZXlib2FyZApTdGFuZGFyZCBVU0Iga2V5Ym9hcmQuICBXaWxsIG92ZXJyaWRlIHRoZSBQUy8yIGtleWJvYXJkIChpZiBwcmVzZW50KS4KQGl0ZW0gc2VyaWFsOlt2ZW5kb3JpZD1AdmFye3ZlbmRvcl9pZH1dWyxwcm9kdWN0X2lkPUB2YXJ7cHJvZHVjdF9pZH1dOkB2YXJ7ZGV2fQpTZXJpYWwgY29udmVydGVyLiBUaGlzIGVtdWxhdGVzIGFuIEZUREkgRlQyMzJCTSBjaGlwIGNvbm5lY3RlZCB0byBob3N0IGNoYXJhY3RlcgpkZXZpY2UgQHZhcntkZXZ9LiBUaGUgYXZhaWxhYmxlIGNoYXJhY3RlciBkZXZpY2VzIGFyZSB0aGUgc2FtZSBhcyBmb3IgdGhlCkBjb2Rley1zZXJpYWx9IG9wdGlvbi4gVGhlIEBjb2Rle3ZlbmRvcmlkfSBhbmQgQGNvZGV7cHJvZHVjdGlkfSBvcHRpb25zIGNhbiBiZQp1c2VkIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IDA0MDM6NjAwMS4gRm9yIGluc3RhbmNlLCAKQGV4YW1wbGUKdXNiX2FkZCBzZXJpYWw6cHJvZHVjdGlkPUZBMDA6dGNwOjE5Mi4xNjguMC4yOjQ0NDQKQGVuZCBleGFtcGxlCndpbGwgY29ubmVjdCB0byB0Y3AgcG9ydCA0NDQ0IG9mIGlwIDE5Mi4xNjguMC4yLCBhbmQgcGx1ZyB0aGF0IHRvIHRoZSB2aXJ0dWFsCnNlcmlhbCBjb252ZXJ0ZXIsIGZha2luZyBhIE1hdHJpeCBPcmJpdGFsIExDRCBEaXNwbGF5IChVU0IgSUQgMDQwMzpGQTAwKS4KQGl0ZW0gYnJhaWxsZQpCcmFpbGxlIGRldmljZS4gIFRoaXMgd2lsbCB1c2UgQnJsQVBJIHRvIGRpc3BsYXkgdGhlIGJyYWlsbGUgb3V0cHV0IG9uIGEgcmVhbApvciBmYWtlIGRldmljZS4KQGl0ZW0gbmV0OkB2YXJ7b3B0aW9uc30KTmV0d29yayBhZGFwdGVyIHRoYXQgc3VwcG9ydHMgQ0RDIGV0aGVybmV0IGFuZCBSTkRJUyBwcm90b2NvbHMuICBAdmFye29wdGlvbnN9CnNwZWNpZmllcyBOSUMgb3B0aW9ucyBhcyB3aXRoIEBjb2Rley1uZXQgbmljLH1AdmFye29wdGlvbnN9IChzZWUgZGVzY3JpcHRpb24pLgpGb3IgaW5zdGFuY2UsIHVzZXItbW9kZSBuZXR3b3JraW5nIGNhbiBiZSB1c2VkIHdpdGgKQGV4YW1wbGUKcWVtdSBbLi4uT1BUSU9OUy4uLl0gLW5ldCB1c2VyLHZsYW49MCAtdXNiZGV2aWNlIG5ldDp2bGFuPTAKQGVuZCBleGFtcGxlCkN1cnJlbnRseSB0aGlzIGNhbm5vdCBiZSB1c2VkIGluIG1hY2hpbmVzIHRoYXQgc3VwcG9ydCBQQ0kgTklDcy4KQGl0ZW0gYnRbOkB2YXJ7aGNpLXR5cGV9XQpCbHVldG9vdGggZG9uZ2xlIHdob3NlIHR5cGUgaXMgc3BlY2lmaWVkIGluIHRoZSBzYW1lIGZvcm1hdCBhcyB3aXRoCnRoZSBAb3B0aW9uey1idCBoY2l9IG9wdGlvbiwgQHB4cmVme2J0LWhjaXMsLGFsbG93ZWQgSENJIHR5cGVzfS4gIElmCm5vIHR5cGUgaXMgZ2l2ZW4sIHRoZSBIQ0kgbG9naWMgY29ycmVzcG9uZHMgdG8gQGNvZGV7LWJ0IGhjaSx2bGFuPTB9LgpUaGlzIFVTQiBkZXZpY2UgaW1wbGVtZW50cyB0aGUgVVNCIFRyYW5zcG9ydCBMYXllciBvZiBIQ0kuICBFeGFtcGxlCnVzYWdlOgpAZXhhbXBsZQpxZW11IFsuLi5PUFRJT05TLi4uXSAtdXNiZGV2aWNlIGJ0OmhjaSx2bGFuPTMgLWJ0IGRldmljZTprZXlib2FyZCx2bGFuPTMKQGVuZCBleGFtcGxlCkBlbmQgdGFibGUKCkBub2RlIGhvc3RfdXNiX2RldmljZXMKQHN1YnNlY3Rpb24gVXNpbmcgaG9zdCBVU0IgZGV2aWNlcyBvbiBhIExpbnV4IGhvc3QKCldBUk5JTkc6IHRoaXMgaXMgYW4gZXhwZXJpbWVudGFsIGZlYXR1cmUuIFFFTVUgd2lsbCBzbG93IGRvd24gd2hlbgp1c2luZyBpdC4gVVNCIGRldmljZXMgcmVxdWlyaW5nIHJlYWwgdGltZSBzdHJlYW1pbmcgKGkuZS4gVVNCIFZpZGVvCkNhbWVyYXMpIGFyZSBub3Qgc3VwcG9ydGVkIHlldC4KCkBlbnVtZXJhdGUKQGl0ZW0gSWYgeW91IHVzZSBhbiBlYXJseSBMaW51eCAyLjQga2VybmVsLCB2ZXJpZnkgdGhhdCBubyBMaW51eCBkcml2ZXIKaXMgYWN0dWFsbHkgdXNpbmcgdGhlIFVTQiBkZXZpY2UuIEEgc2ltcGxlIHdheSB0byBkbyB0aGF0IGlzIHNpbXBseSB0bwpkaXNhYmxlIHRoZSBjb3JyZXNwb25kaW5nIGtlcm5lbCBtb2R1bGUgYnkgcmVuYW1pbmcgaXQgZnJvbSBAZmlsZXtteWRyaXZlci5vfQp0byBAZmlsZXtteWRyaXZlci5vLmRpc2FibGVkfS4KCkBpdGVtIFZlcmlmeSB0aGF0IEBmaWxley9wcm9jL2J1cy91c2J9IGlzIHdvcmtpbmcgKG1vc3QgTGludXggZGlzdHJpYnV0aW9ucyBzaG91bGQgZW5hYmxlIGl0IGJ5IGRlZmF1bHQpLiBZb3Ugc2hvdWxkIHNlZSBzb21ldGhpbmcgbGlrZSB0aGF0OgpAZXhhbXBsZQpscyAvcHJvYy9idXMvdXNiCjAwMSAgZGV2aWNlcyAgZHJpdmVycwpAZW5kIGV4YW1wbGUKCkBpdGVtIFNpbmNlIG9ubHkgcm9vdCBjYW4gYWNjZXNzIHRvIHRoZSBVU0IgZGV2aWNlcyBkaXJlY3RseSwgeW91IGNhbiBlaXRoZXIgbGF1bmNoIFFFTVUgYXMgcm9vdCBvciBjaGFuZ2UgdGhlIHBlcm1pc3Npb25zIG9mIHRoZSBVU0IgZGV2aWNlcyB5b3Ugd2FudCB0byB1c2UuIEZvciB0ZXN0aW5nLCB0aGUgZm9sbG93aW5nIHN1ZmZpY2VzOgpAZXhhbXBsZQpjaG93biAtUiBteXVpZCAvcHJvYy9idXMvdXNiCkBlbmQgZXhhbXBsZQoKQGl0ZW0gTGF1bmNoIFFFTVUgYW5kIGRvIGluIHRoZSBtb25pdG9yOgpAZXhhbXBsZQppbmZvIHVzYmhvc3QKICBEZXZpY2UgMS4yLCBzcGVlZCA0ODAgTWIvcwogICAgQ2xhc3MgMDA6IFVTQiBkZXZpY2UgMTIzNDo1Njc4LCBVU0IgRElTSwpAZW5kIGV4YW1wbGUKWW91IHNob3VsZCBzZWUgdGhlIGxpc3Qgb2YgdGhlIGRldmljZXMgeW91IGNhbiB1c2UgKE5ldmVyIHRyeSB0byB1c2UKaHVicywgaXQgd29uJ3Qgd29yaykuCgpAaXRlbSBBZGQgdGhlIGRldmljZSBpbiBRRU1VIGJ5IHVzaW5nOgpAZXhhbXBsZQp1c2JfYWRkIGhvc3Q6MTIzNDo1Njc4CkBlbmQgZXhhbXBsZQoKTm9ybWFsbHkgdGhlIGd1ZXN0IE9TIHNob3VsZCByZXBvcnQgdGhhdCBhIG5ldyBVU0IgZGV2aWNlIGlzCnBsdWdnZWQuIFlvdSBjYW4gdXNlIHRoZSBvcHRpb24gQG9wdGlvbnstdXNiZGV2aWNlfSB0byBkbyB0aGUgc2FtZS4KCkBpdGVtIE5vdyB5b3UgY2FuIHRyeSB0byB1c2UgdGhlIGhvc3QgVVNCIGRldmljZSBpbiBRRU1VLgoKQGVuZCBlbnVtZXJhdGUKCldoZW4gcmVsYXVuY2hpbmcgUUVNVSwgeW91IG1heSBoYXZlIHRvIHVucGx1ZyBhbmQgcGx1ZyBhZ2FpbiB0aGUgVVNCCmRldmljZSB0byBtYWtlIGl0IHdvcmsgYWdhaW4gKHRoaXMgaXMgYSBidWcpLgoKQG5vZGUgdm5jX3NlY3VyaXR5CkBzZWN0aW9uIFZOQyBzZWN1cml0eQoKVGhlIFZOQyBzZXJ2ZXIgY2FwYWJpbGl0eSBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIGdyYXBoaWNhbCBjb25zb2xlCm9mIHRoZSBndWVzdCBWTSBhY3Jvc3MgdGhlIG5ldHdvcmsuIFRoaXMgaGFzIGEgbnVtYmVyIG9mIHNlY3VyaXR5CmNvbnNpZGVyYXRpb25zIGRlcGVuZGluZyBvbiB0aGUgZGVwbG95bWVudCBzY2VuYXJpb3MuCgpAbWVudQoqIHZuY19zZWNfbm9uZTo6Ciogdm5jX3NlY19wYXNzd29yZDo6Ciogdm5jX3NlY19jZXJ0aWZpY2F0ZTo6Ciogdm5jX3NlY19jZXJ0aWZpY2F0ZV92ZXJpZnk6OgoqIHZuY19zZWNfY2VydGlmaWNhdGVfcHc6OgoqIHZuY19zZWNfc2FzbDo6Ciogdm5jX3NlY19jZXJ0aWZpY2F0ZV9zYXNsOjoKKiB2bmNfZ2VuZXJhdGVfY2VydDo6Ciogdm5jX3NldHVwX3Nhc2w6OgpAZW5kIG1lbnUKQG5vZGUgdm5jX3NlY19ub25lCkBzdWJzZWN0aW9uIFdpdGhvdXQgcGFzc3dvcmRzCgpUaGUgc2ltcGxlc3QgVk5DIHNlcnZlciBzZXR1cCBkb2VzIG5vdCBpbmNsdWRlIGFueSBmb3JtIG9mIGF1dGhlbnRpY2F0aW9uLgpGb3IgdGhpcyBzZXR1cCBpdCBpcyByZWNvbW1lbmRlZCB0byByZXN0cmljdCBpdCB0byBsaXN0ZW4gb24gYSBVTklYIGRvbWFpbgpzb2NrZXQgb25seS4gRm9yIGV4YW1wbGUKCkBleGFtcGxlCnFlbXUgWy4uLk9QVElPTlMuLi5dIC12bmMgdW5peDovaG9tZS9qb2VibG9nZ3MvLnFlbXUtbXl2bS12bmMKQGVuZCBleGFtcGxlCgpUaGlzIGVuc3VyZXMgdGhhdCBvbmx5IHVzZXJzIG9uIGxvY2FsIGJveCB3aXRoIHJlYWQvd3JpdGUgYWNjZXNzIHRvIHRoYXQKcGF0aCBjYW4gYWNjZXNzIHRoZSBWTkMgc2VydmVyLiBUbyBzZWN1cmVseSBhY2Nlc3MgdGhlIFZOQyBzZXJ2ZXIgZnJvbSBhCnJlbW90ZSBtYWNoaW5lLCBhIGNvbWJpbmF0aW9uIG9mIG5ldGNhdCtzc2ggY2FuIGJlIHVzZWQgdG8gcHJvdmlkZSBhIHNlY3VyZQp0dW5uZWwuCgpAbm9kZSB2bmNfc2VjX3Bhc3N3b3JkCkBzdWJzZWN0aW9uIFdpdGggcGFzc3dvcmRzCgpUaGUgVk5DIHByb3RvY29sIGhhcyBsaW1pdGVkIHN1cHBvcnQgZm9yIHBhc3N3b3JkIGJhc2VkIGF1dGhlbnRpY2F0aW9uLiBTaW5jZQp0aGUgcHJvdG9jb2wgbGltaXRzIHBhc3N3b3JkcyB0byA4IGNoYXJhY3RlcnMgaXQgc2hvdWxkIG5vdCBiZSBjb25zaWRlcmVkCnRvIHByb3ZpZGUgaGlnaCBzZWN1cml0eS4gVGhlIHBhc3N3b3JkIGNhbiBiZSBmYWlybHkgZWFzaWx5IGJydXRlLWZvcmNlZCBieQphIGNsaWVudCBtYWtpbmcgcmVwZWF0IGNvbm5lY3Rpb25zLiBGb3IgdGhpcyByZWFzb24sIGEgVk5DIHNlcnZlciB1c2luZyBwYXNzd29yZAphdXRoZW50aWNhdGlvbiBzaG91bGQgYmUgcmVzdHJpY3RlZCB0byBvbmx5IGxpc3RlbiBvbiB0aGUgbG9vcGJhY2sgaW50ZXJmYWNlCm9yIFVOSVggZG9tYWluIHNvY2tldHMuIFBhc3N3b3JkIGF1dGhlbnRpY2F0aW9uIGlzIHJlcXVlc3RlZCB3aXRoIHRoZSBAY29kZXtwYXNzd29yZH0Kb3B0aW9uLCBhbmQgdGhlbiBvbmNlIFFFTVUgaXMgcnVubmluZyB0aGUgcGFzc3dvcmQgaXMgc2V0IHdpdGggdGhlIG1vbml0b3IuIFVudGlsCnRoZSBtb25pdG9yIGlzIHVzZWQgdG8gc2V0IHRoZSBwYXNzd29yZCBhbGwgY2xpZW50cyB3aWxsIGJlIHJlamVjdGVkLgoKQGV4YW1wbGUKcWVtdSBbLi4uT1BUSU9OUy4uLl0gLXZuYyA6MSxwYXNzd29yZCAtbW9uaXRvciBzdGRpbwoocWVtdSkgY2hhbmdlIHZuYyBwYXNzd29yZApQYXNzd29yZDogKioqKioqKioKKHFlbXUpCkBlbmQgZXhhbXBsZQoKQG5vZGUgdm5jX3NlY19jZXJ0aWZpY2F0ZQpAc3Vic2VjdGlvbiBXaXRoIHg1MDkgY2VydGlmaWNhdGVzCgpUaGUgUUVNVSBWTkMgc2VydmVyIGFsc28gaW1wbGVtZW50cyB0aGUgVmVOQ3J5cHQgZXh0ZW5zaW9uIGFsbG93aW5nIHVzZSBvZgpUTFMgZm9yIGVuY3J5cHRpb24gb2YgdGhlIHNlc3Npb24sIGFuZCB4NTA5IGNlcnRpZmljYXRlcyBmb3IgYXV0aGVudGljYXRpb24uClRoZSB1c2Ugb2YgeDUwOSBjZXJ0aWZpY2F0ZXMgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQsIGJlY2F1c2UgVExTIG9uIGl0cwpvd24gaXMgc3VzY2VwdGlibGUgdG8gbWFuLWluLXRoZS1taWRkbGUgYXR0YWNrcy4gQmFzaWMgeDUwOSBjZXJ0aWZpY2F0ZQpzdXBwb3J0IHByb3ZpZGVzIGEgc2VjdXJlIHNlc3Npb24sIGJ1dCBubyBhdXRoZW50aWNhdGlvbi4gVGhpcyBhbGxvd3MgYW55CmNsaWVudCB0byBjb25uZWN0LCBhbmQgcHJvdmlkZXMgYW4gZW5jcnlwdGVkIHNlc3Npb24uCgpAZXhhbXBsZQpxZW11IFsuLi5PUFRJT05TLi4uXSAtdm5jIDoxLHRscyx4NTA5PS9ldGMvcGtpL3FlbXUgLW1vbml0b3Igc3RkaW8KQGVuZCBleGFtcGxlCgpJbiB0aGUgYWJvdmUgZXhhbXBsZSBAY29kZXsvZXRjL3BraS9xZW11fSBzaG91bGQgY29udGFpbiBhdCBsZWFzdCB0aHJlZSBmaWxlcywKQGNvZGV7Y2EtY2VydC5wZW19LCBAY29kZXtzZXJ2ZXItY2VydC5wZW19IGFuZCBAY29kZXtzZXJ2ZXIta2V5LnBlbX0uIFVucHJpdmlsZWdlZAp1c2VycyB3aWxsIHdhbnQgdG8gdXNlIGEgcHJpdmF0ZSBkaXJlY3RvcnksIGZvciBleGFtcGxlIEBjb2RleyRIT01FLy5wa2kvcWVtdX0uCk5CIHRoZSBAY29kZXtzZXJ2ZXIta2V5LnBlbX0gZmlsZSBzaG91bGQgYmUgcHJvdGVjdGVkIHdpdGggZmlsZSBtb2RlIDA2MDAgdG8Kb25seSBiZSByZWFkYWJsZSBieSB0aGUgdXNlciBvd25pbmcgaXQuCgpAbm9kZSB2bmNfc2VjX2NlcnRpZmljYXRlX3ZlcmlmeQpAc3Vic2VjdGlvbiBXaXRoIHg1MDkgY2VydGlmaWNhdGVzIGFuZCBjbGllbnQgdmVyaWZpY2F0aW9uCgpDZXJ0aWZpY2F0ZXMgY2FuIGFsc28gcHJvdmlkZSBhIG1lYW5zIHRvIGF1dGhlbnRpY2F0ZSB0aGUgY2xpZW50IGNvbm5lY3RpbmcuClRoZSBzZXJ2ZXIgd2lsbCByZXF1ZXN0IHRoYXQgdGhlIGNsaWVudCBwcm92aWRlIGEgY2VydGlmaWNhdGUsIHdoaWNoIGl0IHdpbGwKdGhlbiB2YWxpZGF0ZSBhZ2FpbnN0IHRoZSBDQSBjZXJ0aWZpY2F0ZS4gVGhpcyBpcyBhIGdvb2QgY2hvaWNlIGlmIGRlcGxveWluZwppbiBhbiBlbnZpcm9ubWVudCB3aXRoIGEgcHJpdmF0ZSBpbnRlcm5hbCBjZXJ0aWZpY2F0ZSBhdXRob3JpdHkuCgpAZXhhbXBsZQpxZW11IFsuLi5PUFRJT05TLi4uXSAtdm5jIDoxLHRscyx4NTA5dmVyaWZ5PS9ldGMvcGtpL3FlbXUgLW1vbml0b3Igc3RkaW8KQGVuZCBleGFtcGxlCgoKQG5vZGUgdm5jX3NlY19jZXJ0aWZpY2F0ZV9wdwpAc3Vic2VjdGlvbiBXaXRoIHg1MDkgY2VydGlmaWNhdGVzLCBjbGllbnQgdmVyaWZpY2F0aW9uIGFuZCBwYXNzd29yZHMKCkZpbmFsbHksIHRoZSBwcmV2aW91cyBtZXRob2QgY2FuIGJlIGNvbWJpbmVkIHdpdGggVk5DIHBhc3N3b3JkIGF1dGhlbnRpY2F0aW9uCnRvIHByb3ZpZGUgdHdvIGxheWVycyBvZiBhdXRoZW50aWNhdGlvbiBmb3IgY2xpZW50cy4KCkBleGFtcGxlCnFlbXUgWy4uLk9QVElPTlMuLi5dIC12bmMgOjEscGFzc3dvcmQsdGxzLHg1MDl2ZXJpZnk9L2V0Yy9wa2kvcWVtdSAtbW9uaXRvciBzdGRpbwoocWVtdSkgY2hhbmdlIHZuYyBwYXNzd29yZApQYXNzd29yZDogKioqKioqKioKKHFlbXUpCkBlbmQgZXhhbXBsZQoKCkBub2RlIHZuY19zZWNfc2FzbApAc3Vic2VjdGlvbiBXaXRoIFNBU0wgYXV0aGVudGljYXRpb24KClRoZSBTQVNMIGF1dGhlbnRpY2F0aW9uIG1ldGhvZCBpcyBhIFZOQyBleHRlbnNpb24sIHRoYXQgcHJvdmlkZXMgYW4KZWFzaWx5IGV4dGVuZGFibGUsIHBsdWdnYWJsZSBhdXRoZW50aWNhdGlvbiBtZXRob2QuIFRoaXMgYWxsb3dzIGZvcgppbnRlZ3JhdGlvbiB3aXRoIGEgd2lkZSByYW5nZSBvZiBhdXRoZW50aWNhdGlvbiBtZWNoYW5pc21zLCBzdWNoIGFzClBBTSwgR1NTQVBJL0tlcmJlcm9zLCBMREFQLCBTUUwgZGF0YWJhc2VzLCBvbmUtdGltZSBrZXlzIGFuZCBtb3JlLgpUaGUgc3RyZW5ndGggb2YgdGhlIGF1dGhlbnRpY2F0aW9uIGRlcGVuZHMgb24gdGhlIGV4YWN0IG1lY2hhbmlzbQpjb25maWd1cmVkLiBJZiB0aGUgY2hvc2VuIG1lY2hhbmlzbSBhbHNvIHByb3ZpZGVzIGEgU1NGIGxheWVyLCB0aGVuCml0IHdpbGwgZW5jcnlwdCB0aGUgZGF0YXN0cmVhbSBhcyB3ZWxsLgoKUmVmZXIgdG8gdGhlIGxhdGVyIGRvY3Mgb24gaG93IHRvIGNob29zZSB0aGUgZXhhY3QgU0FTTCBtZWNoYW5pc20KdXNlZCBmb3IgYXV0aGVudGljYXRpb24sIGJ1dCBhc3N1bWluZyB1c2Ugb2Ygb25lIHN1cHBvcnRpbmcgU1NGLAp0aGVuIFFFTVUgY2FuIGJlIGxhdW5jaGVkIHdpdGg6CgpAZXhhbXBsZQpxZW11IFsuLi5PUFRJT05TLi4uXSAtdm5jIDoxLHNhc2wgLW1vbml0b3Igc3RkaW8KQGVuZCBleGFtcGxlCgpAbm9kZSB2bmNfc2VjX2NlcnRpZmljYXRlX3Nhc2wKQHN1YnNlY3Rpb24gV2l0aCB4NTA5IGNlcnRpZmljYXRlcyBhbmQgU0FTTCBhdXRoZW50aWNhdGlvbgoKSWYgdGhlIGRlc2lyZWQgU0FTTCBhdXRoZW50aWNhdGlvbiBtZWNoYW5pc20gZG9lcyBub3Qgc3VwcG9ydGVkClNTRiBsYXllcnMsIHRoZW4gaXQgaXMgc3Ryb25nbHkgYWR2aXNlZCB0byBydW4gaXQgaW4gY29tYmluYXRpb24Kd2l0aCBUTFMgYW5kIHg1MDkgY2VydGlmaWNhdGVzLiBUaGlzIHByb3ZpZGVzIHNlY3VyZWx5IGVuY3J5cHRlZApkYXRhIHN0cmVhbSwgYXZvaWRpbmcgcmlzayBvZiBjb21wcm9taXNpbmcgb2YgdGhlIHNlY3VyaXR5CmNyZWRlbnRpYWxzLiBUaGlzIGNhbiBiZSBlbmFibGVkLCBieSBjb21iaW5pbmcgdGhlICdzYXNsJyBvcHRpb24Kd2l0aCB0aGUgYWZvcmVtZW50aW9uZWQgVExTICsgeDUwOSBvcHRpb25zOgoKQGV4YW1wbGUKcWVtdSBbLi4uT1BUSU9OUy4uLl0gLXZuYyA6MSx0bHMseDUwOSxzYXNsIC1tb25pdG9yIHN0ZGlvCkBlbmQgZXhhbXBsZQoKCkBub2RlIHZuY19nZW5lcmF0ZV9jZXJ0CkBzdWJzZWN0aW9uIEdlbmVyYXRpbmcgY2VydGlmaWNhdGVzIGZvciBWTkMKClRoZSBHTlUgVExTIHBhY2thZ2VzIHByb3ZpZGVzIGEgY29tbWFuZCBjYWxsZWQgQGNvZGV7Y2VydHRvb2x9IHdoaWNoIGNhbgpiZSB1c2VkIHRvIGdlbmVyYXRlIGNlcnRpZmljYXRlcyBhbmQga2V5cyBpbiBQRU0gZm9ybWF0LiBBdCBhIG1pbmltdW0gaXQKaXMgbmVjY2Vzc2FyeSB0byBzZXR1cCBhIGNlcnRpZmljYXRlIGF1dGhvcml0eSwgYW5kIGlzc3VlIGNlcnRpZmljYXRlcyB0bwplYWNoIHNlcnZlci4gSWYgdXNpbmcgY2VydGlmaWNhdGVzIGZvciBhdXRoZW50aWNhdGlvbiwgdGhlbiBlYWNoIGNsaWVudAp3aWxsIGFsc28gbmVlZCB0byBiZSBpc3N1ZWQgYSBjZXJ0aWZpY2F0ZS4gVGhlIHJlY29tbWVuZGF0aW9uIGlzIGZvciB0aGUKc2VydmVyIHRvIGtlZXAgaXRzIGNlcnRpZmljYXRlcyBpbiBlaXRoZXIgQGNvZGV7L2V0Yy9wa2kvcWVtdX0gb3IgZm9yCnVucHJpdmlsZWdlZCB1c2VycyBpbiBAY29kZXskSE9NRS8ucGtpL3FlbXV9LgoKQG1lbnUKKiB2bmNfZ2VuZXJhdGVfY2E6OgoqIHZuY19nZW5lcmF0ZV9zZXJ2ZXI6OgoqIHZuY19nZW5lcmF0ZV9jbGllbnQ6OgpAZW5kIG1lbnUKQG5vZGUgdm5jX2dlbmVyYXRlX2NhCkBzdWJzdWJzZWN0aW9uIFNldHVwIHRoZSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkKClRoaXMgc3RlcCBvbmx5IG5lZWRzIHRvIGJlIHBlcmZvcm1lZCBvbmNlIHBlciBvcmdhbml6YXRpb24gLyBvcmdhbml6YXRpb25hbAp1bml0LiBGaXJzdCB0aGUgQ0EgbmVlZHMgYSBwcml2YXRlIGtleS4gVGhpcyBrZXkgbXVzdCBiZSBrZXB0IFZFUlkgc2VjcmV0CmFuZCBzZWN1cmUuIElmIHRoaXMga2V5IGlzIGNvbXByb21pc2VkIHRoZSBlbnRpcmUgdHJ1c3QgY2hhaW4gb2YgdGhlIGNlcnRpZmljYXRlcwppc3N1ZWQgd2l0aCBpdCBpcyBsb3N0LgoKQGV4YW1wbGUKIyBjZXJ0dG9vbCAtLWdlbmVyYXRlLXByaXZrZXkgPiBjYS1rZXkucGVtCkBlbmQgZXhhbXBsZQoKQSBDQSBuZWVkcyB0byBoYXZlIGEgcHVibGljIGNlcnRpZmljYXRlLiBGb3Igc2ltcGxpY2l0eSBpdCBjYW4gYmUgYSBzZWxmLXNpZ25lZApjZXJ0aWZpY2F0ZSwgb3Igb25lIGlzc3VlIGJ5IGEgY29tbWVyY2lhbCBjZXJ0aWZpY2F0ZSBpc3N1aW5nIGF1dGhvcml0eS4gVG8KZ2VuZXJhdGUgYSBzZWxmLXNpZ25lZCBjZXJ0aWZpY2F0ZSByZXF1aXJlcyBvbmUgY29yZSBwaWVjZSBvZiBpbmZvcm1hdGlvbiwgdGhlCm5hbWUgb2YgdGhlIG9yZ2FuaXphdGlvbi4KCkBleGFtcGxlCiMgY2F0ID4gY2EuaW5mbyA8PEVPRgpjbiA9IE5hbWUgb2YgeW91ciBvcmdhbml6YXRpb24KY2EKY2VydF9zaWduaW5nX2tleQpFT0YKIyBjZXJ0dG9vbCAtLWdlbmVyYXRlLXNlbGYtc2lnbmVkIFwKICAgICAgICAgICAtLWxvYWQtcHJpdmtleSBjYS1rZXkucGVtCiAgICAgICAgICAgLS10ZW1wbGF0ZSBjYS5pbmZvIFwKICAgICAgICAgICAtLW91dGZpbGUgY2EtY2VydC5wZW0KQGVuZCBleGFtcGxlCgpUaGUgQGNvZGV7Y2EtY2VydC5wZW19IGZpbGUgc2hvdWxkIGJlIGNvcGllZCB0byBhbGwgc2VydmVycyBhbmQgY2xpZW50cyB3aXNoaW5nIHRvIHV0aWxpemUKVExTIHN1cHBvcnQgaW4gdGhlIFZOQyBzZXJ2ZXIuIFRoZSBAY29kZXtjYS1rZXkucGVtfSBtdXN0IG5vdCBiZSBkaXNjbG9zZWQvY29waWVkIGF0IGFsbC4KCkBub2RlIHZuY19nZW5lcmF0ZV9zZXJ2ZXIKQHN1YnN1YnNlY3Rpb24gSXNzdWluZyBzZXJ2ZXIgY2VydGlmaWNhdGVzCgpFYWNoIHNlcnZlciAob3IgaG9zdCkgbmVlZHMgdG8gYmUgaXNzdWVkIHdpdGggYSBrZXkgYW5kIGNlcnRpZmljYXRlLiBXaGVuIGNvbm5lY3RpbmcKdGhlIGNlcnRpZmljYXRlIGlzIHNlbnQgdG8gdGhlIGNsaWVudCB3aGljaCB2YWxpZGF0ZXMgaXQgYWdhaW5zdCB0aGUgQ0EgY2VydGlmaWNhdGUuClRoZSBjb3JlIHBpZWNlIG9mIGluZm9ybWF0aW9uIGZvciBhIHNlcnZlciBjZXJ0aWZpY2F0ZSBpcyB0aGUgaG9zdG5hbWUuIFRoaXMgc2hvdWxkCmJlIHRoZSBmdWxseSBxdWFsaWZpZWQgaG9zdG5hbWUgdGhhdCB0aGUgY2xpZW50IHdpbGwgY29ubmVjdCB3aXRoLCBzaW5jZSB0aGUgY2xpZW50CndpbGwgdHlwaWNhbGx5IGFsc28gdmVyaWZ5IHRoZSBob3N0bmFtZSBpbiB0aGUgY2VydGlmaWNhdGUuIE9uIHRoZSBob3N0IGhvbGRpbmcgdGhlCnNlY3VyZSBDQSBwcml2YXRlIGtleToKCkBleGFtcGxlCiMgY2F0ID4gc2VydmVyLmluZm8gPDxFT0YKb3JnYW5pemF0aW9uID0gTmFtZSAgb2YgeW91ciBvcmdhbml6YXRpb24KY24gPSBzZXJ2ZXIuZm9vLmV4YW1wbGUuY29tCnRsc193d3dfc2VydmVyCmVuY3J5cHRpb25fa2V5CnNpZ25pbmdfa2V5CkVPRgojIGNlcnR0b29sIC0tZ2VuZXJhdGUtcHJpdmtleSA+IHNlcnZlci1rZXkucGVtCiMgY2VydHRvb2wgLS1nZW5lcmF0ZS1jZXJ0aWZpY2F0ZSBcCiAgICAgICAgICAgLS1sb2FkLWNhLWNlcnRpZmljYXRlIGNhLWNlcnQucGVtIFwKICAgICAgICAgICAtLWxvYWQtY2EtcHJpdmtleSBjYS1rZXkucGVtIFwKICAgICAgICAgICAtLWxvYWQtcHJpdmtleSBzZXJ2ZXIgc2VydmVyLWtleS5wZW0gXAogICAgICAgICAgIC0tdGVtcGxhdGUgc2VydmVyLmluZm8gXAogICAgICAgICAgIC0tb3V0ZmlsZSBzZXJ2ZXItY2VydC5wZW0KQGVuZCBleGFtcGxlCgpUaGUgQGNvZGV7c2VydmVyLWtleS5wZW19IGFuZCBAY29kZXtzZXJ2ZXItY2VydC5wZW19IGZpbGVzIHNob3VsZCBub3cgYmUgc2VjdXJlbHkgY29waWVkCnRvIHRoZSBzZXJ2ZXIgZm9yIHdoaWNoIHRoZXkgd2VyZSBnZW5lcmF0ZWQuIFRoZSBAY29kZXtzZXJ2ZXIta2V5LnBlbX0gaXMgc2VjdXJpdHkKc2Vuc2l0aXZlIGFuZCBzaG91bGQgYmUga2VwdCBwcm90ZWN0ZWQgd2l0aCBmaWxlIG1vZGUgMDYwMCB0byBwcmV2ZW50IGRpc2Nsb3N1cmUuCgpAbm9kZSB2bmNfZ2VuZXJhdGVfY2xpZW50CkBzdWJzdWJzZWN0aW9uIElzc3VpbmcgY2xpZW50IGNlcnRpZmljYXRlcwoKSWYgdGhlIFFFTVUgVk5DIHNlcnZlciBpcyB0byB1c2UgdGhlIEBjb2Rle3g1MDl2ZXJpZnl9IG9wdGlvbiB0byB2YWxpZGF0ZSBjbGllbnQKY2VydGlmaWNhdGVzIGFzIGl0cyBhdXRoZW50aWNhdGlvbiBtZWNoYW5pc20sIGVhY2ggY2xpZW50IGFsc28gbmVlZHMgdG8gYmUgaXNzdWVkCmEgY2VydGlmaWNhdGUuIFRoZSBjbGllbnQgY2VydGlmaWNhdGUgY29udGFpbnMgZW5vdWdoIG1ldGFkYXRhIHRvIHVuaXF1ZWx5IGlkZW50aWZ5CnRoZSBjbGllbnQsIHR5cGljYWxseSBvcmdhbml6YXRpb24sIHN0YXRlLCBjaXR5LCBidWlsZGluZywgZXRjLiBPbiB0aGUgaG9zdCBob2xkaW5nCnRoZSBzZWN1cmUgQ0EgcHJpdmF0ZSBrZXk6CgpAZXhhbXBsZQojIGNhdCA+IGNsaWVudC5pbmZvIDw8RU9GCmNvdW50cnkgPSBHQgpzdGF0ZSA9IExvbmRvbgpsb2NhbGl0eSA9IExvbmRvbgpvcmdhbmlhemF0aW9uID0gTmFtZSBvZiB5b3VyIG9yZ2FuaXphdGlvbgpjbiA9IGNsaWVudC5mb28uZXhhbXBsZS5jb20KdGxzX3d3d19jbGllbnQKZW5jcnlwdGlvbl9rZXkKc2lnbmluZ19rZXkKRU9GCiMgY2VydHRvb2wgLS1nZW5lcmF0ZS1wcml2a2V5ID4gY2xpZW50LWtleS5wZW0KIyBjZXJ0dG9vbCAtLWdlbmVyYXRlLWNlcnRpZmljYXRlIFwKICAgICAgICAgICAtLWxvYWQtY2EtY2VydGlmaWNhdGUgY2EtY2VydC5wZW0gXAogICAgICAgICAgIC0tbG9hZC1jYS1wcml2a2V5IGNhLWtleS5wZW0gXAogICAgICAgICAgIC0tbG9hZC1wcml2a2V5IGNsaWVudC1rZXkucGVtIFwKICAgICAgICAgICAtLXRlbXBsYXRlIGNsaWVudC5pbmZvIFwKICAgICAgICAgICAtLW91dGZpbGUgY2xpZW50LWNlcnQucGVtCkBlbmQgZXhhbXBsZQoKVGhlIEBjb2Rle2NsaWVudC1rZXkucGVtfSBhbmQgQGNvZGV7Y2xpZW50LWNlcnQucGVtfSBmaWxlcyBzaG91bGQgbm93IGJlIHNlY3VyZWx5CmNvcGllZCB0byB0aGUgY2xpZW50IGZvciB3aGljaCB0aGV5IHdlcmUgZ2VuZXJhdGVkLgoKCkBub2RlIHZuY19zZXR1cF9zYXNsCgpAc3Vic2VjdGlvbiBDb25maWd1cmluZyBTQVNMIG1lY2hhbmlzbXMKClRoZSBmb2xsb3dpbmcgZG9jdW1lbnRhdGlvbiBhc3N1bWVzIHVzZSBvZiB0aGUgQ3lydXMgU0FTTCBpbXBsZW1lbnRhdGlvbiBvbiBhCkxpbnV4IGhvc3QsIGJ1dCB0aGUgcHJpbmNpcGFscyBzaG91bGQgYXBwbHkgdG8gYW55IG90aGVyIFNBU0wgaW1wbC4gV2hlbiBTQVNMCmlzIGVuYWJsZWQsIHRoZSBtZWNoYW5pc20gY29uZmlndXJhdGlvbiB3aWxsIGJlIGxvYWRlZCBmcm9tIHN5c3RlbSBkZWZhdWx0ClNBU0wgc2VydmljZSBjb25maWcgL2V0Yy9zYXNsMi9xZW11LmNvbmYuIElmIHJ1bm5pbmcgUUVNVSBhcyBhbgp1bnByaXZpbGVnZWQgdXNlciwgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgU0FTTF9DT05GX1BBVEggY2FuIGJlIHVzZWQKdG8gbWFrZSBpdCBzZWFyY2ggYWx0ZXJuYXRlIGxvY2F0aW9ucyBmb3IgdGhlIHNlcnZpY2UgY29uZmlnLgoKVGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBtaWdodCBjb250YWluCgpAZXhhbXBsZQptZWNoX2xpc3Q6IGRpZ2VzdC1tZDUKc2FzbGRiX3BhdGg6IC9ldGMvcWVtdS9wYXNzd2QuZGIKQGVuZCBleGFtcGxlCgpUaGlzIHNheXMgdG8gdXNlIHRoZSAnRGlnZXN0IE1ENScgbWVjaGFuaXNtLCB3aGljaCBpcyBzaW1pbGFyIHRvIHRoZSBIVFRQCkRpZ2VzdC1NRDUgbWVjaGFuaXNtLiBUaGUgbGlzdCBvZiB2YWxpZCB1c2VybmFtZXMgJiBwYXNzd29yZHMgaXMgbWFpbnRhaW5lZAppbiB0aGUgL2V0Yy9xZW11L3Bhc3N3ZC5kYiBmaWxlLCBhbmQgY2FuIGJlIHVwZGF0ZWQgdXNpbmcgdGhlIHNhc2xwYXNzd2QyCmNvbW1hbmQuIFdoaWxlIHRoaXMgbWVjaGFuaXNtIGlzIGVhc3kgdG8gY29uZmlndXJlIGFuZCB1c2UsIGl0IGlzIG5vdApjb25zaWRlcmVkIHNlY3VyZSBieSBtb2Rlcm4gc3RhbmRhcmRzLCBzbyBvbmx5IHN1aXRhYmxlIGZvciBkZXZlbG9wZXJzIC8KYWQtaG9jIHRlc3RpbmcuCgpBIG1vcmUgc2VyaW91cyBkZXBsb3ltZW50IG1pZ2h0IHVzZSBLZXJiZXJvcywgd2hpY2ggaXMgZG9uZSB3aXRoIHRoZSAnZ3NzYXBpJwptZWNoYW5pc20KCkBleGFtcGxlCm1lY2hfbGlzdDogZ3NzYXBpCmtleXRhYjogL2V0Yy9xZW11L2tyYjUudGFiCkBlbmQgZXhhbXBsZQoKRm9yIHRoaXMgdG8gd29yayB0aGUgYWRtaW5pc3RyYXRvciBvZiB5b3VyIEtEQyBtdXN0IGdlbmVyYXRlIGEgS2VyYmVyb3MKcHJpbmNpcGFsIGZvciB0aGUgc2VydmVyLCB3aXRoIGEgbmFtZSBvZiAgJ3FlbXUvc29tZWhvc3QuZXhhbXBsZS5jb21AQEVYQU1QTEUuQ09NJwpyZXBsYWNpbmcgJ3NvbWVob3N0LmV4YW1wbGUuY29tJyB3aXRoIHRoZSBmdWxseSBxdWFsaWZpZWQgaG9zdCBuYW1lIG9mIHRoZQptYWNoaW5lIHJ1bm5pbmcgUUVNVSwgYW5kICdFWEFNUExFLkNPTScgd2l0aCB0aGUgS2ViZXJvcyBSZWFsbS4KCk90aGVyIGNvbmZpZ3VyYXRpb25zIHdpbGwgYmUgbGVmdCBhcyBhbiBleGVyY2lzZSBmb3IgdGhlIHJlYWRlci4gSXQgc2hvdWxkCmJlIG5vdGVkIHRoYXQgb25seSBEaWdlc3QtTUQ1IGFuZCBHU1NBUEkgcHJvdmlkZXMgYSBTU0YgbGF5ZXIgZm9yIGRhdGEKZW5jcnlwdGlvbi4gRm9yIGFsbCBvdGhlciBtZWNoYW5pc21zLCBWTkMgc2hvdWxkIGFsd2F5cyBiZSBjb25maWd1cmVkIHRvCnVzZSBUTFMgYW5kIHg1MDkgY2VydGlmaWNhdGVzIHRvIHByb3RlY3Qgc2VjdXJpdHkgY3JlZGVudGlhbHMgZnJvbSBzbm9vcGluZy4KCkBub2RlIGdkYl91c2FnZQpAc2VjdGlvbiBHREIgdXNhZ2UKClFFTVUgaGFzIGEgcHJpbWl0aXZlIHN1cHBvcnQgdG8gd29yayB3aXRoIGdkYiwgc28gdGhhdCB5b3UgY2FuIGRvCidDdHJsLUMnIHdoaWxlIHRoZSB2aXJ0dWFsIG1hY2hpbmUgaXMgcnVubmluZyBhbmQgaW5zcGVjdCBpdHMgc3RhdGUuCgpJbiBvcmRlciB0byB1c2UgZ2RiLCBsYXVuY2ggcWVtdSB3aXRoIHRoZSAnLXMnIG9wdGlvbi4gSXQgd2lsbCB3YWl0IGZvciBhCmdkYiBjb25uZWN0aW9uOgpAZXhhbXBsZQo+IHFlbXUgLXMgLWtlcm5lbCBhcmNoL2kzODYvYm9vdC9iekltYWdlIC1oZGEgcm9vdC0yLjQuMjAuaW1nIFwKICAgICAgIC1hcHBlbmQgInJvb3Q9L2Rldi9oZGEiCkNvbm5lY3RlZCB0byBob3N0IG5ldHdvcmsgaW50ZXJmYWNlOiB0dW4wCldhaXRpbmcgZ2RiIGNvbm5lY3Rpb24gb24gcG9ydCAxMjM0CkBlbmQgZXhhbXBsZQoKVGhlbiBsYXVuY2ggZ2RiIG9uIHRoZSAndm1saW51eCcgZXhlY3V0YWJsZToKQGV4YW1wbGUKPiBnZGIgdm1saW51eApAZW5kIGV4YW1wbGUKCkluIGdkYiwgY29ubmVjdCB0byBRRU1VOgpAZXhhbXBsZQooZ2RiKSB0YXJnZXQgcmVtb3RlIGxvY2FsaG9zdDoxMjM0CkBlbmQgZXhhbXBsZQoKVGhlbiB5b3UgY2FuIHVzZSBnZGIgbm9ybWFsbHkuIEZvciBleGFtcGxlLCB0eXBlICdjJyB0byBsYXVuY2ggdGhlIGtlcm5lbDoKQGV4YW1wbGUKKGdkYikgYwpAZW5kIGV4YW1wbGUKCkhlcmUgYXJlIHNvbWUgdXNlZnVsIHRpcHMgaW4gb3JkZXIgdG8gdXNlIGdkYiBvbiBzeXN0ZW0gY29kZToKCkBlbnVtZXJhdGUKQGl0ZW0KVXNlIEBjb2Rle2luZm8gcmVnfSB0byBkaXNwbGF5IGFsbCB0aGUgQ1BVIHJlZ2lzdGVycy4KQGl0ZW0KVXNlIEBjb2Rle3gvMTBpICRlaXB9IHRvIGRpc3BsYXkgdGhlIGNvZGUgYXQgdGhlIFBDIHBvc2l0aW9uLgpAaXRlbQpVc2UgQGNvZGV7c2V0IGFyY2hpdGVjdHVyZSBpODA4Nn0gdG8gZHVtcCAxNiBiaXQgY29kZS4gVGhlbiB1c2UKQGNvZGV7eC8xMGkgJGNzKjE2KyRlaXB9IHRvIGR1bXAgdGhlIGNvZGUgYXQgdGhlIFBDIHBvc2l0aW9uLgpAZW5kIGVudW1lcmF0ZQoKQWR2YW5jZWQgZGVidWdnaW5nIG9wdGlvbnM6CgpUaGUgZGVmYXVsdCBzaW5nbGUgc3RlcHBpbmcgYmVoYXZpb3IgaXMgc3RlcCB3aXRoIHRoZSBJUlFzIGFuZCB0aW1lciBzZXJ2aWNlIHJvdXRpbmVzIG9mZi4gIEl0IGlzIHNldCB0aGlzIHdheSBiZWNhdXNlIHdoZW4gZ2RiIGV4ZWN1dGVzIGEgc2luZ2xlIHN0ZXAgaXQgZXhwZWN0cyB0byBhZHZhbmNlIGJleW9uZCB0aGUgY3VycmVudCBpbnN0cnVjdGlvbi4gIFdpdGggdGhlIElSUXMgYW5kIGFuZCB0aW1lciBzZXJ2aWNlIHJvdXRpbmVzIG9uLCBhIHNpbmdsZSBzdGVwIG1pZ2h0IGp1bXAgaW50byB0aGUgb25lIG9mIHRoZSBpbnRlcnJ1cHQgb3IgZXhjZXB0aW9uIHZlY3RvcnMgaW5zdGVhZCBvZiBleGVjdXRpbmcgdGhlIGN1cnJlbnQgaW5zdHJ1Y3Rpb24uIFRoaXMgbWVhbnMgeW91IG1heSBoaXQgdGhlIHNhbWUgYnJlYWtwb2ludCBhIG51bWJlciBvZiB0aW1lcyBiZWZvcmUgZXhlY3V0aW5nIHRoZSBpbnN0cnVjdGlvbiBnZGIgd2FudHMgdG8gaGF2ZSBleGVjdXRlZC4gIEJlY2F1c2UgdGhlcmUgYXJlIHJhcmUgY2lyY3Vtc3RhbmNlcyB3aGVyZSB5b3Ugd2FudCB0byBzaW5nbGUgc3RlcCBpbnRvIGFuIGludGVycnVwdCB2ZWN0b3IgdGhlIGJlaGF2aW9yIGNhbiBiZSBjb250cm9sbGVkIGZyb20gR0RCLiAgVGhlcmUgYXJlIHRocmVlIGNvbW1hbmRzIHlvdSBjYW4gcXVlcnkgYW5kIHNldCB0aGUgc2luZ2xlIHN0ZXAgYmVoYXZpb3I6CkB0YWJsZSBAY29kZQpAaXRlbSBtYWludGVuYW5jZSBwYWNrZXQgcXFlbXUuc3N0ZXBiaXRzCgpUaGlzIHdpbGwgZGlzcGxheSB0aGUgTUFTSyBiaXRzIHVzZWQgdG8gY29udHJvbCB0aGUgc2luZ2xlIHN0ZXBwaW5nIElFOgpAZXhhbXBsZQooZ2RiKSBtYWludGVuYW5jZSBwYWNrZXQgcXFlbXUuc3N0ZXBiaXRzCnNlbmRpbmc6ICJxcWVtdS5zc3RlcGJpdHMiCnJlY2VpdmVkOiAiRU5BQkxFPTEsTk9JUlE9MixOT1RJTUVSPTQiCkBlbmQgZXhhbXBsZQpAaXRlbSBtYWludGVuYW5jZSBwYWNrZXQgcXFlbXUuc3N0ZXAKClRoaXMgd2lsbCBkaXNwbGF5IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBtYXNrIHVzZWQgd2hlbiBzaW5nbGUgc3RlcHBpbmcgSUU6CkBleGFtcGxlCihnZGIpIG1haW50ZW5hbmNlIHBhY2tldCBxcWVtdS5zc3RlcApzZW5kaW5nOiAicXFlbXUuc3N0ZXAiCnJlY2VpdmVkOiAiMHg3IgpAZW5kIGV4YW1wbGUKQGl0ZW0gbWFpbnRlbmFuY2UgcGFja2V0IFFxZW11LnNzdGVwPUhFWF9WQUxVRQoKVGhpcyB3aWxsIGNoYW5nZSB0aGUgc2luZ2xlIHN0ZXAgbWFzaywgc28gaWYgd2FudGVkIHRvIGVuYWJsZSBJUlFzIG9uIHRoZSBzaW5nbGUgc3RlcCwgYnV0IG5vdCB0aW1lcnMsIHlvdSB3b3VsZCB1c2U6CkBleGFtcGxlCihnZGIpIG1haW50ZW5hbmNlIHBhY2tldCBRcWVtdS5zc3RlcD0weDUKc2VuZGluZzogInFlbXUuc3N0ZXA9MHg1IgpyZWNlaXZlZDogIk9LIgpAZW5kIGV4YW1wbGUKQGVuZCB0YWJsZQoKQG5vZGUgcGNzeXNfb3Nfc3BlY2lmaWMKQHNlY3Rpb24gVGFyZ2V0IE9TIHNwZWNpZmljIGluZm9ybWF0aW9uCgpAc3Vic2VjdGlvbiBMaW51eAoKVG8gaGF2ZSBhY2Nlc3MgdG8gU1ZHQSBncmFwaGljIG1vZGVzIHVuZGVyIFgxMSwgdXNlIHRoZSBAY29kZXt2ZXNhfSBvcgp0aGUgQGNvZGV7Y2lycnVzfSBYMTEgZHJpdmVyLiBGb3Igb3B0aW1hbCBwZXJmb3JtYW5jZXMsIHVzZSAxNiBiaXQKY29sb3IgZGVwdGggaW4gdGhlIGd1ZXN0IGFuZCB0aGUgaG9zdCBPUy4KCldoZW4gdXNpbmcgYSAyLjYgZ3Vlc3QgTGludXgga2VybmVsLCB5b3Ugc2hvdWxkIGFkZCB0aGUgb3B0aW9uCkBjb2Rle2Nsb2NrPXBpdH0gb24gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUgYmVjYXVzZSB0aGUgMi42IExpbnV4Cmtlcm5lbHMgbWFrZSB2ZXJ5IHN0cmljdCByZWFsIHRpbWUgY2xvY2sgY2hlY2tzIGJ5IGRlZmF1bHQgdGhhdCBRRU1VCmNhbm5vdCBzaW11bGF0ZSBleGFjdGx5LgoKV2hlbiB1c2luZyBhIDIuNiBndWVzdCBMaW51eCBrZXJuZWwsIHZlcmlmeSB0aGF0IHRoZSA0Ry80RyBwYXRjaCBpcwpub3QgYWN0aXZhdGVkIGJlY2F1c2UgUUVNVSBpcyBzbG93ZXIgd2l0aCB0aGlzIHBhdGNoLiBUaGUgUUVNVQpBY2NlbGVyYXRvciBNb2R1bGUgaXMgYWxzbyBtdWNoIHNsb3dlciBpbiB0aGlzIGNhc2UuIEVhcmxpZXIgRmVkb3JhCkNvcmUgMyBMaW51eCBrZXJuZWwgKDwgMi42LjktMS43MjRfRkMzKSB3ZXJlIGtub3duIHRvIGluY29ycG9yYXRlIHRoaXMKcGF0Y2ggYnkgZGVmYXVsdC4gTmV3ZXIga2VybmVscyBkb24ndCBoYXZlIGl0LgoKQHN1YnNlY3Rpb24gV2luZG93cwoKSWYgeW91IGhhdmUgYSBzbG93IGhvc3QsIHVzaW5nIFdpbmRvd3MgOTUgaXMgYmV0dGVyIGFzIGl0IGdpdmVzIHRoZQpiZXN0IHNwZWVkLiBXaW5kb3dzIDIwMDAgaXMgYWxzbyBhIGdvb2QgY2hvaWNlLgoKQHN1YnN1YnNlY3Rpb24gU1ZHQSBncmFwaGljIG1vZGVzIHN1cHBvcnQKClFFTVUgZW11bGF0ZXMgYSBDaXJydXMgTG9naWMgR0Q1NDQ2IFZpZGVvCmNhcmQuIEFsbCBXaW5kb3dzIHZlcnNpb25zIHN0YXJ0aW5nIGZyb20gV2luZG93cyA5NSBzaG91bGQgcmVjb2duaXplCmFuZCB1c2UgdGhpcyBncmFwaGljIGNhcmQuIEZvciBvcHRpbWFsIHBlcmZvcm1hbmNlcywgdXNlIDE2IGJpdCBjb2xvcgpkZXB0aCBpbiB0aGUgZ3Vlc3QgYW5kIHRoZSBob3N0IE9TLgoKSWYgeW91IGFyZSB1c2luZyBXaW5kb3dzIFhQIGFzIGd1ZXN0IE9TIGFuZCBpZiB5b3Ugd2FudCB0byB1c2UgaGlnaApyZXNvbHV0aW9uIG1vZGVzIHdoaWNoIHRoZSBDaXJydXMgTG9naWMgQklPUyBkb2VzIG5vdCBzdXBwb3J0IChpLmUuID49CjEyODB4MTAyNHgxNiksIHRoZW4geW91IHNob3VsZCB1c2UgdGhlIFZFU0EgVkJFIHZpcnR1YWwgZ3JhcGhpYyBjYXJkCihvcHRpb24gQG9wdGlvbnstc3RkLXZnYX0pLgoKQHN1YnN1YnNlY3Rpb24gQ1BVIHVzYWdlIHJlZHVjdGlvbgoKV2luZG93cyA5eCBkb2VzIG5vdCBjb3JyZWN0bHkgdXNlIHRoZSBDUFUgSExUCmluc3RydWN0aW9uLiBUaGUgcmVzdWx0IGlzIHRoYXQgaXQgdGFrZXMgaG9zdCBDUFUgY3ljbGVzIGV2ZW4gd2hlbgppZGxlLiBZb3UgY2FuIGluc3RhbGwgdGhlIHV0aWxpdHkgZnJvbQpAdXJse2h0dHA6Ly93d3cudXNlci5jaXR5bGluZS5ydS9+bWF4YW1uL2FtbmhsdG0uemlwfSB0byBzb2x2ZSB0aGlzCnByb2JsZW0uIE5vdGUgdGhhdCBubyBzdWNoIHRvb2wgaXMgbmVlZGVkIGZvciBOVCwgMjAwMCBvciBYUC4KCkBzdWJzdWJzZWN0aW9uIFdpbmRvd3MgMjAwMCBkaXNrIGZ1bGwgcHJvYmxlbQoKV2luZG93cyAyMDAwIGhhcyBhIGJ1ZyB3aGljaCBnaXZlcyBhIGRpc2sgZnVsbCBwcm9ibGVtIGR1cmluZyBpdHMKaW5zdGFsbGF0aW9uLiBXaGVuIGluc3RhbGxpbmcgaXQsIHVzZSB0aGUgQG9wdGlvbnstd2luMmstaGFja30gUUVNVQpvcHRpb24gdG8gZW5hYmxlIGEgc3BlY2lmaWMgd29ya2Fyb3VuZC4gQWZ0ZXIgV2luZG93cyAyMDAwIGlzCmluc3RhbGxlZCwgeW91IG5vIGxvbmdlciBuZWVkIHRoaXMgb3B0aW9uICh0aGlzIG9wdGlvbiBzbG93cyBkb3duIHRoZQpJREUgdHJhbnNmZXJzKS4KCkBzdWJzdWJzZWN0aW9uIFdpbmRvd3MgMjAwMCBzaHV0ZG93bgoKV2luZG93cyAyMDAwIGNhbm5vdCBhdXRvbWF0aWNhbGx5IHNodXRkb3duIGluIFFFTVUgYWx0aG91Z2ggV2luZG93cyA5OApjYW4uIEl0IGNvbWVzIGZyb20gdGhlIGZhY3QgdGhhdCBXaW5kb3dzIDIwMDAgZG9lcyBub3QgYXV0b21hdGljYWxseQp1c2UgdGhlIEFQTSBkcml2ZXIgcHJvdmlkZWQgYnkgdGhlIEJJT1MuCgpJbiBvcmRlciB0byBjb3JyZWN0IHRoYXQsIGRvIHRoZSBmb2xsb3dpbmcgKHRoYW5rcyB0byBTdHJ1YW4KQmFydGxldHQpOiBnbyB0byB0aGUgQ29udHJvbCBQYW5lbCA9PiBBZGQvUmVtb3ZlIEhhcmR3YXJlICYgTmV4dCA9PgpBZGQvVHJvdWJsZXNob290IGEgZGV2aWNlID0+IEFkZCBhIG5ldyBkZXZpY2UgJiBOZXh0ID0+IE5vLCBzZWxlY3QgdGhlCmhhcmR3YXJlIGZyb20gYSBsaXN0ICYgTmV4dCA9PiBOVCBBcG0vTGVnYWN5IFN1cHBvcnQgJiBOZXh0ID0+IE5leHQKKGFnYWluKSBhIGZldyB0aW1lcy4gTm93IHRoZSBkcml2ZXIgaXMgaW5zdGFsbGVkIGFuZCBXaW5kb3dzIDIwMDAgbm93CmNvcnJlY3RseSBpbnN0cnVjdHMgUUVNVSB0byBzaHV0ZG93biBhdCB0aGUgYXBwcm9wcmlhdGUgbW9tZW50LgoKQHN1YnN1YnNlY3Rpb24gU2hhcmUgYSBkaXJlY3RvcnkgYmV0d2VlbiBVbml4IGFuZCBXaW5kb3dzCgpTZWUgQHJlZntzZWNfaW52b2NhdGlvbn0gYWJvdXQgdGhlIGhlbHAgb2YgdGhlIG9wdGlvbiBAb3B0aW9uey1zbWJ9LgoKQHN1YnN1YnNlY3Rpb24gV2luZG93cyBYUCBzZWN1cml0eSBwcm9ibGVtCgpTb21lIHJlbGVhc2VzIG9mIFdpbmRvd3MgWFAgaW5zdGFsbCBjb3JyZWN0bHkgYnV0IGdpdmUgYSBzZWN1cml0eQplcnJvciB3aGVuIGJvb3Rpbmc6CkBleGFtcGxlCkEgcHJvYmxlbSBpcyBwcmV2ZW50aW5nIFdpbmRvd3MgZnJvbSBhY2N1cmF0ZWx5IGNoZWNraW5nIHRoZQpsaWNlbnNlIGZvciB0aGlzIGNvbXB1dGVyLiBFcnJvciBjb2RlOiAweDgwMDcwM2U2LgpAZW5kIGV4YW1wbGUKClRoZSB3b3JrYXJvdW5kIGlzIHRvIGluc3RhbGwgYSBzZXJ2aWNlIHBhY2sgZm9yIFhQIGFmdGVyIGEgYm9vdCBpbiBzYWZlCm1vZGUuIFRoZW4gcmVib290LCBhbmQgdGhlIHByb2JsZW0gc2hvdWxkIGdvIGF3YXkuIFNpbmNlIHRoZXJlIGlzIG5vCm5ldHdvcmsgd2hpbGUgaW4gc2FmZSBtb2RlLCBpdHMgcmVjb21tZW5kZWQgdG8gZG93bmxvYWQgdGhlIGZ1bGwKaW5zdGFsbGF0aW9uIG9mIFNQMSBvciBTUDIgYW5kIHRyYW5zZmVyIHRoYXQgdmlhIGFuIElTTyBvciB1c2luZyB0aGUKdnZmYXQgYmxvY2sgZGV2aWNlICgiLWhkYiBmYXQ6ZGlyZWN0b3J5X3doaWNoX2hvbGRzX3RoZV9TUCIpLgoKQHN1YnNlY3Rpb24gTVMtRE9TIGFuZCBGcmVlRE9TCgpAc3Vic3Vic2VjdGlvbiBDUFUgdXNhZ2UgcmVkdWN0aW9uCgpET1MgZG9lcyBub3QgY29ycmVjdGx5IHVzZSB0aGUgQ1BVIEhMVCBpbnN0cnVjdGlvbi4gVGhlIHJlc3VsdCBpcyB0aGF0Cml0IHRha2VzIGhvc3QgQ1BVIGN5Y2xlcyBldmVuIHdoZW4gaWRsZS4gWW91IGNhbiBpbnN0YWxsIHRoZSB1dGlsaXR5CmZyb20gQHVybHtodHRwOi8vd3d3LnZtd2FyZS5jb20vc29mdHdhcmUvZG9zaWRsZTIxMC56aXB9IHRvIHNvbHZlIHRoaXMKcHJvYmxlbS4KCkBub2RlIFFFTVUgU3lzdGVtIGVtdWxhdG9yIGZvciBub24gUEMgdGFyZ2V0cwpAY2hhcHRlciBRRU1VIFN5c3RlbSBlbXVsYXRvciBmb3Igbm9uIFBDIHRhcmdldHMKClFFTVUgaXMgYSBnZW5lcmljIGVtdWxhdG9yIGFuZCBpdCBlbXVsYXRlcyBtYW55IG5vbiBQQwptYWNoaW5lcy4gTW9zdCBvZiB0aGUgb3B0aW9ucyBhcmUgc2ltaWxhciB0byB0aGUgUEMgZW11bGF0b3IuIFRoZQpkaWZmZXJlbmNlcyBhcmUgbWVudGlvbmVkIGluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnMuCgpAbWVudQoqIFFFTVUgUG93ZXJQQyBTeXN0ZW0gZW11bGF0b3I6OgoqIFNwYXJjMzIgU3lzdGVtIGVtdWxhdG9yOjoKKiBTcGFyYzY0IFN5c3RlbSBlbXVsYXRvcjo6CiogTUlQUyBTeXN0ZW0gZW11bGF0b3I6OgoqIEFSTSBTeXN0ZW0gZW11bGF0b3I6OgoqIENvbGRGaXJlIFN5c3RlbSBlbXVsYXRvcjo6CkBlbmQgbWVudQoKQG5vZGUgUUVNVSBQb3dlclBDIFN5c3RlbSBlbXVsYXRvcgpAc2VjdGlvbiBRRU1VIFBvd2VyUEMgU3lzdGVtIGVtdWxhdG9yCgpVc2UgdGhlIGV4ZWN1dGFibGUgQGZpbGV7cWVtdS1zeXN0ZW0tcHBjfSB0byBzaW11bGF0ZSBhIGNvbXBsZXRlIFBSRVAKb3IgUG93ZXJNYWMgUG93ZXJQQyBzeXN0ZW0uCgpRRU1VIGVtdWxhdGVzIHRoZSBmb2xsb3dpbmcgUG93ZXJNYWMgcGVyaXBoZXJhbHM6CgpAaXRlbWl6ZSBAbWludXMKQGl0ZW0KVW5pTm9ydGggb3IgR3JhY2tsZSBQQ0kgQnJpZGdlCkBpdGVtClBDSSBWR0EgY29tcGF0aWJsZSBjYXJkIHdpdGggVkVTQSBCb2NocyBFeHRlbnNpb25zCkBpdGVtCjIgUE1BQyBJREUgaW50ZXJmYWNlcyB3aXRoIGhhcmQgZGlzayBhbmQgQ0QtUk9NIHN1cHBvcnQKQGl0ZW0KTkUyMDAwIFBDSSBhZGFwdGVycwpAaXRlbQpOb24gVm9sYXRpbGUgUkFNCkBpdGVtClZJQS1DVURBIHdpdGggQURCIGtleWJvYXJkIGFuZCBtb3VzZS4KQGVuZCBpdGVtaXplCgpRRU1VIGVtdWxhdGVzIHRoZSBmb2xsb3dpbmcgUFJFUCBwZXJpcGhlcmFsczoKCkBpdGVtaXplIEBtaW51cwpAaXRlbQpQQ0kgQnJpZGdlCkBpdGVtClBDSSBWR0EgY29tcGF0aWJsZSBjYXJkIHdpdGggVkVTQSBCb2NocyBFeHRlbnNpb25zCkBpdGVtCjIgSURFIGludGVyZmFjZXMgd2l0aCBoYXJkIGRpc2sgYW5kIENELVJPTSBzdXBwb3J0CkBpdGVtCkZsb3BweSBkaXNrCkBpdGVtCk5FMjAwMCBuZXR3b3JrIGFkYXB0ZXJzCkBpdGVtClNlcmlhbCBwb3J0CkBpdGVtClBSRVAgTm9uIFZvbGF0aWxlIFJBTQpAaXRlbQpQQyBjb21wYXRpYmxlIGtleWJvYXJkIGFuZCBtb3VzZS4KQGVuZCBpdGVtaXplCgpRRU1VIHVzZXMgdGhlIE9wZW4gSGFjaydXYXJlIE9wZW4gRmlybXdhcmUgQ29tcGF0aWJsZSBCSU9TIGF2YWlsYWJsZSBhdApAdXJse2h0dHA6Ly9wZXJzby5tYWdpYy5mci9sX2luZGllbi9PcGVuSGFja1dhcmUvaW5kZXguaHRtfS4KClNpbmNlIHZlcnNpb24gMC45LjEsIFFFTVUgdXNlcyBPcGVuQklPUyBAdXJse2h0dHA6Ly93d3cub3BlbmJpb3Mub3JnL30KZm9yIHRoZSBnM2JlaWdlIGFuZCBtYWM5OSBQb3dlck1hYyBtYWNoaW5lcy4gT3BlbkJJT1MgaXMgYSBmcmVlIChHUEwKdjIpIHBvcnRhYmxlIGZpcm13YXJlIGltcGxlbWVudGF0aW9uLiBUaGUgZ29hbCBpcyB0byBpbXBsZW1lbnQgYSAxMDAlCklFRUUgMTI3NS0xOTk0IChyZWZlcnJlZCB0byBhcyBPcGVuIEZpcm13YXJlKSBjb21wbGlhbnQgZmlybXdhcmUuCgpAYyBtYW4gYmVnaW4gT1BUSU9OUwoKVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBzcGVjaWZpYyB0byB0aGUgUG93ZXJQQyBlbXVsYXRpb246CgpAdGFibGUgQG9wdGlvbgoKQGl0ZW0gLWcgV3hIW3hERVBUSF0KClNldCB0aGUgaW5pdGlhbCBWR0EgZ3JhcGhpYyBtb2RlLiBUaGUgZGVmYXVsdCBpcyA4MDB4NjAweDE1LgoKQGl0ZW0gLXByb20tZW52IHN0cmluZwoKU2V0IE9wZW5CSU9TIHZhcmlhYmxlcyBpbiBOVlJBTSwgZm9yIGV4YW1wbGU6CgpAZXhhbXBsZQpxZW11LXN5c3RlbS1wcGMgLXByb20tZW52ICdhdXRvLWJvb3Q/PWZhbHNlJyBcCiAtcHJvbS1lbnYgJ2Jvb3QtZGV2aWNlPWhkOjIsXHlhYm9vdCcgXAogLXByb20tZW52ICdib290LWFyZ3M9Y29uZj1oZDoyLFx5YWJvb3QuY29uZicKQGVuZCBleGFtcGxlCgpUaGVzZSB2YXJpYWJsZXMgYXJlIG5vdCB1c2VkIGJ5IE9wZW4gSGFjaydXYXJlLgoKQGVuZCB0YWJsZQoKQGMgbWFuIGVuZAoKCk1vcmUgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlIGF0CkB1cmx7aHR0cDovL3BlcnNvLm1hZ2ljLmZyL2xfaW5kaWVuL3FlbXUtcHBjL30uCgpAbm9kZSBTcGFyYzMyIFN5c3RlbSBlbXVsYXRvcgpAc2VjdGlvbiBTcGFyYzMyIFN5c3RlbSBlbXVsYXRvcgoKVXNlIHRoZSBleGVjdXRhYmxlIEBmaWxle3FlbXUtc3lzdGVtLXNwYXJjfSB0byBzaW11bGF0ZSB0aGUgZm9sbG93aW5nClN1bjRtIGFyY2hpdGVjdHVyZSBtYWNoaW5lczoKQGl0ZW1pemUgQG1pbnVzCkBpdGVtClNQQVJDc3RhdGlvbiA0CkBpdGVtClNQQVJDc3RhdGlvbiA1CkBpdGVtClNQQVJDc3RhdGlvbiAxMApAaXRlbQpTUEFSQ3N0YXRpb24gMjAKQGl0ZW0KU1BBUkNzZXJ2ZXIgNjAwTVAKQGl0ZW0KU1BBUkNzdGF0aW9uIExYCkBpdGVtClNQQVJDc3RhdGlvbiBWb3lhZ2VyCkBpdGVtClNQQVJDY2xhc3NpYwpAaXRlbQpTUEFSQ2Jvb2sKQGVuZCBpdGVtaXplCgpUaGUgZW11bGF0aW9uIGlzIHNvbWV3aGF0IGNvbXBsZXRlLiBTTVAgdXAgdG8gMTYgQ1BVcyBpcyBzdXBwb3J0ZWQsCmJ1dCBMaW51eCBsaW1pdHMgdGhlIG51bWJlciBvZiB1c2FibGUgQ1BVcyB0byA0LgoKSXQncyBhbHNvIHBvc3NpYmxlIHRvIHNpbXVsYXRlIGEgU1BBUkNzdGF0aW9uIDIgKHN1bjRjIGFyY2hpdGVjdHVyZSksClNQQVJDc2VydmVyIDEwMDAsIG9yIFNQQVJDY2VudGVyIDIwMDAgKHN1bjRkIGFyY2hpdGVjdHVyZSksIGJ1dCB0aGVzZQplbXVsYXRvcnMgYXJlIG5vdCB1c2FibGUgeWV0LgoKUUVNVSBlbXVsYXRlcyB0aGUgZm9sbG93aW5nIHN1bjRtL3N1bjRjL3N1bjRkIHBlcmlwaGVyYWxzOgoKQGl0ZW1pemUgQG1pbnVzCkBpdGVtCklPTU1VIG9yIElPLVVOSVRzCkBpdGVtClRDWCBGcmFtZSBidWZmZXIKQGl0ZW0KTGFuY2UgKEFtNzk5MCkgRXRoZXJuZXQKQGl0ZW0KTm9uIFZvbGF0aWxlIFJBTSBNNDhUMDIvTTQ4VDA4CkBpdGVtClNsYXZlIEkvTzogdGltZXJzLCBpbnRlcnJ1cHQgY29udHJvbGxlcnMsIFppbG9nIHNlcmlhbCBwb3J0cywga2V5Ym9hcmQKYW5kIHBvd2VyL3Jlc2V0IGxvZ2ljCkBpdGVtCkVTUCBTQ1NJIGNvbnRyb2xsZXIgd2l0aCBoYXJkIGRpc2sgYW5kIENELVJPTSBzdXBwb3J0CkBpdGVtCkZsb3BweSBkcml2ZSAobm90IG9uIFNTLTYwME1QKQpAaXRlbQpDUzQyMzEgc291bmQgZGV2aWNlIChvbmx5IG9uIFNTLTUsIG5vdCB3b3JraW5nIHlldCkKQGVuZCBpdGVtaXplCgpUaGUgbnVtYmVyIG9mIHBlcmlwaGVyYWxzIGlzIGZpeGVkIGluIHRoZSBhcmNoaXRlY3R1cmUuICBNYXhpbXVtCm1lbW9yeSBzaXplIGRlcGVuZHMgb24gdGhlIG1hY2hpbmUgdHlwZSwgZm9yIFNTLTUgaXQgaXMgMjU2TUIgYW5kIGZvcgpvdGhlcnMgMjA0N01CLgoKU2luY2UgdmVyc2lvbiAwLjguMiwgUUVNVSB1c2VzIE9wZW5CSU9TCkB1cmx7aHR0cDovL3d3dy5vcGVuYmlvcy5vcmcvfS4gT3BlbkJJT1MgaXMgYSBmcmVlIChHUEwgdjIpIHBvcnRhYmxlCmZpcm13YXJlIGltcGxlbWVudGF0aW9uLiBUaGUgZ29hbCBpcyB0byBpbXBsZW1lbnQgYSAxMDAlIElFRUUKMTI3NS0xOTk0IChyZWZlcnJlZCB0byBhcyBPcGVuIEZpcm13YXJlKSBjb21wbGlhbnQgZmlybXdhcmUuCgpBIHNhbXBsZSBMaW51eCAyLjYgc2VyaWVzIGtlcm5lbCBhbmQgcmFtIGRpc2sgaW1hZ2UgYXJlIGF2YWlsYWJsZSBvbgp0aGUgUUVNVSB3ZWIgc2l0ZS4gVGhlcmUgYXJlIHN0aWxsIGlzc3VlcyB3aXRoIE5ldEJTRCBhbmQgT3BlbkJTRCwgYnV0CnNvbWUga2VybmVsIHZlcnNpb25zIHdvcmsuIFBsZWFzZSBub3RlIHRoYXQgY3VycmVudGx5IFNvbGFyaXMga2VybmVscwpkb24ndCB3b3JrIHByb2JhYmx5IGR1ZSB0byBpbnRlcmZhY2UgaXNzdWVzIGJldHdlZW4gT3BlbkJJT1MgYW5kClNvbGFyaXMuCgpAYyBtYW4gYmVnaW4gT1BUSU9OUwoKVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBzcGVjaWZpYyB0byB0aGUgU3BhcmMzMiBlbXVsYXRpb246CgpAdGFibGUgQG9wdGlvbgoKQGl0ZW0gLWcgV3hIeFt4REVQVEhdCgpTZXQgdGhlIGluaXRpYWwgVENYIGdyYXBoaWMgbW9kZS4gVGhlIGRlZmF1bHQgaXMgMTAyNHg3Njh4OCwgY3VycmVudGx5CnRoZSBvbmx5IG90aGVyIHBvc3NpYmxlIG1vZGUgaXMgMTAyNHg3Njh4MjQuCgpAaXRlbSAtcHJvbS1lbnYgc3RyaW5nCgpTZXQgT3BlbkJJT1MgdmFyaWFibGVzIGluIE5WUkFNLCBmb3IgZXhhbXBsZToKCkBleGFtcGxlCnFlbXUtc3lzdGVtLXNwYXJjIC1wcm9tLWVudiAnYXV0by1ib290Pz1mYWxzZScgXAogLXByb20tZW52ICdib290LWRldmljZT1zZCgwLDIsMCk6ZCcgLXByb20tZW52ICdib290LWFyZ3M9bGludXggc2luZ2xlJwpAZW5kIGV4YW1wbGUKCkBpdGVtIC1NIFtTUy00fFNTLTV8U1MtMTB8U1MtMjB8U1MtNjAwTVB8TFh8Vm95YWdlcnxTUEFSQ0NsYXNzaWN8U1BBUkNib29rfFNTLTJ8U1MtMTAwMHxTUy0yMDAwXQoKU2V0IHRoZSBlbXVsYXRlZCBtYWNoaW5lIHR5cGUuIERlZmF1bHQgaXMgU1MtNS4KCkBlbmQgdGFibGUKCkBjIG1hbiBlbmQKCkBub2RlIFNwYXJjNjQgU3lzdGVtIGVtdWxhdG9yCkBzZWN0aW9uIFNwYXJjNjQgU3lzdGVtIGVtdWxhdG9yCgpVc2UgdGhlIGV4ZWN1dGFibGUgQGZpbGV7cWVtdS1zeXN0ZW0tc3BhcmM2NH0gdG8gc2ltdWxhdGUgYSBTdW40dQooVWx0cmFTUEFSQyBQQy1saWtlIG1hY2hpbmUpLCBTdW40diAoVDEgUEMtbGlrZSBtYWNoaW5lKSwgb3IgZ2VuZXJpYwpOaWFnYXJhIChUMSkgbWFjaGluZS4gVGhlIGVtdWxhdG9yIGlzIG5vdCB1c2FibGUgZm9yIGFueXRoaW5nIHlldCwgYnV0Cml0IGNhbiBsYXVuY2ggc29tZSBrZXJuZWxzLgoKUUVNVSBlbXVsYXRlcyB0aGUgZm9sbG93aW5nIHBlcmlwaGVyYWxzOgoKQGl0ZW1pemUgQG1pbnVzCkBpdGVtClVsdHJhU3BhcmMgSUlpIEFQQiBQQ0kgQnJpZGdlCkBpdGVtClBDSSBWR0EgY29tcGF0aWJsZSBjYXJkIHdpdGggVkVTQSBCb2NocyBFeHRlbnNpb25zCkBpdGVtClBTLzIgbW91c2UgYW5kIGtleWJvYXJkCkBpdGVtCk5vbiBWb2xhdGlsZSBSQU0gTTQ4VDU5CkBpdGVtClBDLWNvbXBhdGlibGUgc2VyaWFsIHBvcnRzCkBpdGVtCjIgUENJIElERSBpbnRlcmZhY2VzIHdpdGggaGFyZCBkaXNrIGFuZCBDRC1ST00gc3VwcG9ydApAaXRlbQpGbG9wcHkgZGlzawpAZW5kIGl0ZW1pemUKCkBjIG1hbiBiZWdpbiBPUFRJT05TCgpUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIHNwZWNpZmljIHRvIHRoZSBTcGFyYzY0IGVtdWxhdGlvbjoKCkB0YWJsZSBAb3B0aW9uCgpAaXRlbSAtcHJvbS1lbnYgc3RyaW5nCgpTZXQgT3BlbkJJT1MgdmFyaWFibGVzIGluIE5WUkFNLCBmb3IgZXhhbXBsZToKCkBleGFtcGxlCnFlbXUtc3lzdGVtLXNwYXJjNjQgLXByb20tZW52ICdhdXRvLWJvb3Q/PWZhbHNlJwpAZW5kIGV4YW1wbGUKCkBpdGVtIC1NIFtzdW40dXxzdW40dnxOaWFnYXJhXQoKU2V0IHRoZSBlbXVsYXRlZCBtYWNoaW5lIHR5cGUuIFRoZSBkZWZhdWx0IGlzIHN1bjR1LgoKQGVuZCB0YWJsZQoKQGMgbWFuIGVuZAoKQG5vZGUgTUlQUyBTeXN0ZW0gZW11bGF0b3IKQHNlY3Rpb24gTUlQUyBTeXN0ZW0gZW11bGF0b3IKCkZvdXIgZXhlY3V0YWJsZXMgY292ZXIgc2ltdWxhdGlvbiBvZiAzMiBhbmQgNjQtYml0IE1JUFMgc3lzdGVtcyBpbgpib3RoIGVuZGlhbiBvcHRpb25zLCBAZmlsZXtxZW11LXN5c3RlbS1taXBzfSwgQGZpbGV7cWVtdS1zeXN0ZW0tbWlwc2VsfQpAZmlsZXtxZW11LXN5c3RlbS1taXBzNjR9IGFuZCBAZmlsZXtxZW11LXN5c3RlbS1taXBzNjRlbH0uCkZpdmUgZGlmZmVyZW50IG1hY2hpbmUgdHlwZXMgYXJlIGVtdWxhdGVkOgoKQGl0ZW1pemUgQG1pbnVzCkBpdGVtCkEgZ2VuZXJpYyBJU0EgUEMtbGlrZSBtYWNoaW5lICJtaXBzIgpAaXRlbQpUaGUgTUlQUyBNYWx0YSBwcm90b3R5cGUgYm9hcmQgIm1hbHRhIgpAaXRlbQpBbiBBQ0VSIFBpY2EgInBpY2E2MSIuIFRoaXMgbWFjaGluZSBuZWVkcyB0aGUgNjQtYml0IGVtdWxhdG9yLgpAaXRlbQpNSVBTIGVtdWxhdG9yIHBzZXVkbyBib2FyZCAibWlwc3NpbSIKQGl0ZW0KQSBNSVBTIE1hZ251bSBSNDAwMCBtYWNoaW5lICJtYWdudW0iLiBUaGlzIG1hY2hpbmUgbmVlZHMgdGhlIDY0LWJpdCBlbXVsYXRvci4KQGVuZCBpdGVtaXplCgpUaGUgZ2VuZXJpYyBlbXVsYXRpb24gaXMgc3VwcG9ydGVkIGJ5IERlYmlhbiAnRXRjaCcgYW5kIGlzIGFibGUgdG8KaW5zdGFsbCBEZWJpYW4gaW50byBhIHZpcnR1YWwgZGlzayBpbWFnZS4gVGhlIGZvbGxvd2luZyBkZXZpY2VzIGFyZQplbXVsYXRlZDoKCkBpdGVtaXplIEBtaW51cwpAaXRlbQpBIHJhbmdlIG9mIE1JUFMgQ1BVcywgZGVmYXVsdCBpcyB0aGUgMjRLZgpAaXRlbQpQQyBzdHlsZSBzZXJpYWwgcG9ydApAaXRlbQpQQyBzdHlsZSBJREUgZGlzawpAaXRlbQpORTIwMDAgbmV0d29yayBjYXJkCkBlbmQgaXRlbWl6ZQoKVGhlIE1hbHRhIGVtdWxhdGlvbiBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIGRldmljZXM6CgpAaXRlbWl6ZSBAbWludXMKQGl0ZW0KQ29yZSBib2FyZCB3aXRoIE1JUFMgMjRLZiBDUFUgYW5kIEdhbGlsZW8gc3lzdGVtIGNvbnRyb2xsZXIKQGl0ZW0KUElJWDQgUENJL1VTQi9TTWJ1cyBjb250cm9sbGVyCkBpdGVtClRoZSBNdWx0aS1JL08gY2hpcCdzIHNlcmlhbCBkZXZpY2UKQGl0ZW0KUENuZXQzMiBQQ0kgbmV0d29yayBjYXJkCkBpdGVtCk1hbHRhIEZQR0Egc2VyaWFsIGRldmljZQpAaXRlbQpDaXJydXMgKGRlZmF1bHQpIG9yIGFueSBvdGhlciBQQ0kgVkdBIGdyYXBoaWNzIGNhcmQKQGVuZCBpdGVtaXplCgpUaGUgQUNFUiBQaWNhIGVtdWxhdGlvbiBzdXBwb3J0czoKCkBpdGVtaXplIEBtaW51cwpAaXRlbQpNSVBTIFI0MDAwIENQVQpAaXRlbQpQQy1zdHlsZSBJUlEgYW5kIERNQSBjb250cm9sbGVycwpAaXRlbQpQQyBLZXlib2FyZApAaXRlbQpJREUgY29udHJvbGxlcgpAZW5kIGl0ZW1pemUKClRoZSBtaXBzc2ltIHBzZXVkbyBib2FyZCBlbXVsYXRpb24gcHJvdmlkZXMgYW4gZW52aXJvbm1lbnQgc2ltaWxpYXIKdG8gd2hhdCB0aGUgcHJvcHJpZXRhcnkgTUlQUyBlbXVsYXRvciB1c2VzIGZvciBydW5uaW5nIExpbnV4LgpJdCBzdXBwb3J0czoKCkBpdGVtaXplIEBtaW51cwpAaXRlbQpBIHJhbmdlIG9mIE1JUFMgQ1BVcywgZGVmYXVsdCBpcyB0aGUgMjRLZgpAaXRlbQpQQyBzdHlsZSBzZXJpYWwgcG9ydApAaXRlbQpNSVBTbmV0IG5ldHdvcmsgZW11bGF0aW9uCkBlbmQgaXRlbWl6ZQoKVGhlIE1JUFMgTWFnbnVtIFI0MDAwIGVtdWxhdGlvbiBzdXBwb3J0czoKCkBpdGVtaXplIEBtaW51cwpAaXRlbQpNSVBTIFI0MDAwIENQVQpAaXRlbQpQQy1zdHlsZSBJUlEgY29udHJvbGxlcgpAaXRlbQpQQyBLZXlib2FyZApAaXRlbQpTQ1NJIGNvbnRyb2xsZXIKQGl0ZW0KRzM2NCBmcmFtZWJ1ZmZlcgpAZW5kIGl0ZW1pemUKCgpAbm9kZSBBUk0gU3lzdGVtIGVtdWxhdG9yCkBzZWN0aW9uIEFSTSBTeXN0ZW0gZW11bGF0b3IKClVzZSB0aGUgZXhlY3V0YWJsZSBAZmlsZXtxZW11LXN5c3RlbS1hcm19IHRvIHNpbXVsYXRlIGEgQVJNCm1hY2hpbmUuIFRoZSBBUk0gSW50ZWdyYXRvci9DUCBib2FyZCBpcyBlbXVsYXRlZCB3aXRoIHRoZSBmb2xsb3dpbmcKZGV2aWNlczoKCkBpdGVtaXplIEBtaW51cwpAaXRlbQpBUk05MjZFLCBBUk0xMDI2RSwgQVJNOTQ2RSwgQVJNMTEzNiBvciBDb3J0ZXgtQTggQ1BVCkBpdGVtClR3byBQTDAxMSBVQVJUcwpAaXRlbQpTTUMgOTFjMTExIEV0aGVybmV0IGFkYXB0ZXIKQGl0ZW0KUEwxMTAgTENEIGNvbnRyb2xsZXIKQGl0ZW0KUEwwNTAgS01JIHdpdGggUFMvMiBrZXlib2FyZCBhbmQgbW91c2UuCkBpdGVtClBMMTgxIE11bHRpTWVkaWEgQ2FyZCBJbnRlcmZhY2Ugd2l0aCBTRCBjYXJkLgpAZW5kIGl0ZW1pemUKClRoZSBBUk0gVmVyc2F0aWxlIGJhc2Vib2FyZCBpcyBlbXVsYXRlZCB3aXRoIHRoZSBmb2xsb3dpbmcgZGV2aWNlczoKCkBpdGVtaXplIEBtaW51cwpAaXRlbQpBUk05MjZFLCBBUk0xMTM2IG9yIENvcnRleC1BOCBDUFUKQGl0ZW0KUEwxOTAgVmVjdG9yZWQgSW50ZXJydXB0IENvbnRyb2xsZXIKQGl0ZW0KRm91ciBQTDAxMSBVQVJUcwpAaXRlbQpTTUMgOTFjMTExIEV0aGVybmV0IGFkYXB0ZXIKQGl0ZW0KUEwxMTAgTENEIGNvbnRyb2xsZXIKQGl0ZW0KUEwwNTAgS01JIHdpdGggUFMvMiBrZXlib2FyZCBhbmQgbW91c2UuCkBpdGVtClBDSSBob3N0IGJyaWRnZS4gIE5vdGUgdGhlIGVtdWxhdGVkIFBDSSBicmlkZ2Ugb25seSBwcm92aWRlcyBhY2Nlc3MgdG8KUENJIG1lbW9yeSBzcGFjZS4gIEl0IGRvZXMgbm90IHByb3ZpZGUgYWNjZXNzIHRvIFBDSSBJTyBzcGFjZS4KVGhpcyBtZWFucyBzb21lIGRldmljZXMgKGVnLiBuZTJrX3BjaSBOSUMpIGFyZSBub3QgdXNhYmxlLCBhbmQgb3RoZXJzCihlZy4gcnRsODEzOSBOSUMpIGFyZSBvbmx5IHVzYWJsZSB3aGVuIHRoZSBndWVzdCBkcml2ZXJzIHVzZSB0aGUgbWVtb3J5Cm1hcHBlZCBjb250cm9sIHJlZ2lzdGVycy4KQGl0ZW0KUENJIE9IQ0kgVVNCIGNvbnRyb2xsZXIuCkBpdGVtCkxTSTUzQzg5NUEgUENJIFNDU0kgSG9zdCBCdXMgQWRhcHRlciB3aXRoIGhhcmQgZGlzayBhbmQgQ0QtUk9NIGRldmljZXMuCkBpdGVtClBMMTgxIE11bHRpTWVkaWEgQ2FyZCBJbnRlcmZhY2Ugd2l0aCBTRCBjYXJkLgpAZW5kIGl0ZW1pemUKClRoZSBBUk0gUmVhbFZpZXcgRW11bGF0aW9uIGJhc2Vib2FyZCBpcyBlbXVsYXRlZCB3aXRoIHRoZSBmb2xsb3dpbmcgZGV2aWNlczoKCkBpdGVtaXplIEBtaW51cwpAaXRlbQpBUk05MjZFLCBBUk0xMTM2LCBBUk0xMU1QQ09SRSh4NCkgb3IgQ29ydGV4LUE4IENQVQpAaXRlbQpBUk0gQU1CQSBHZW5lcmljL0Rpc3RyaWJ1dGVkIEludGVycnVwdCBDb250cm9sbGVyCkBpdGVtCkZvdXIgUEwwMTEgVUFSVHMKQGl0ZW0KU01DIDkxYzExMSBFdGhlcm5ldCBhZGFwdGVyCkBpdGVtClBMMTEwIExDRCBjb250cm9sbGVyCkBpdGVtClBMMDUwIEtNSSB3aXRoIFBTLzIga2V5Ym9hcmQgYW5kIG1vdXNlCkBpdGVtClBDSSBob3N0IGJyaWRnZQpAaXRlbQpQQ0kgT0hDSSBVU0IgY29udHJvbGxlcgpAaXRlbQpMU0k1M0M4OTVBIFBDSSBTQ1NJIEhvc3QgQnVzIEFkYXB0ZXIgd2l0aCBoYXJkIGRpc2sgYW5kIENELVJPTSBkZXZpY2VzCkBpdGVtClBMMTgxIE11bHRpTWVkaWEgQ2FyZCBJbnRlcmZhY2Ugd2l0aCBTRCBjYXJkLgpAZW5kIGl0ZW1pemUKClRoZSBYU2NhbGUtYmFzZWQgY2xhbXNoZWxsIFBEQSBtb2RlbHMgKCJTcGl0eiIsICJBa2l0YSIsICJCb3J6b2kiCmFuZCAiVGVycmllciIpIGVtdWxhdGlvbiBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIHBlcmlwaGVyYWxzOgoKQGl0ZW1pemUgQG1pbnVzCkBpdGVtCkludGVsIFBYQTI3MCBTeXN0ZW0tb24tY2hpcCAoQVJNIFY1VEUgY29yZSkKQGl0ZW0KTkFORCBGbGFzaCBtZW1vcnkKQGl0ZW0KSUJNL0hpdGFjaGkgRFNDTSBtaWNyb2RyaXZlIGluIGEgUFhBIFBDTUNJQSBzbG90IC0gbm90IGluICJBa2l0YSIKQGl0ZW0KT24tY2hpcCBPSENJIFVTQiBjb250cm9sbGVyCkBpdGVtCk9uLWNoaXAgTENEIGNvbnRyb2xsZXIKQGl0ZW0KT24tY2hpcCBSZWFsIFRpbWUgQ2xvY2sKQGl0ZW0KVEkgQURTNzg0NiB0b3VjaHNjcmVlbiBjb250cm9sbGVyIG9uIFNTUCBidXMKQGl0ZW0KTWF4aW0gTUFYMTExMSBhbmFsb2ctZGlnaXRhbCBjb252ZXJ0ZXIgb24gSUBtYXRoe14yfUMgYnVzCkBpdGVtCkdQSU8tY29ubmVjdGVkIGtleWJvYXJkIGNvbnRyb2xsZXIgYW5kIExFRHMKQGl0ZW0KU2VjdXJlIERpZ2l0YWwgY2FyZCBjb25uZWN0ZWQgdG8gUFhBIE1NQy9TRCBob3N0CkBpdGVtClRocmVlIG9uLWNoaXAgVUFSVHMKQGl0ZW0KV004NzUwIGF1ZGlvIENPREVDIG9uIElAbWF0aHteMn1DIGFuZCBJQG1hdGh7XjJ9UyBidXNzZXMKQGVuZCBpdGVtaXplCgpUaGUgUGFsbSBUdW5nc3RlbnxFIFBEQSAoY29kZW5hbWUgIkNoZWV0YWgiKSBlbXVsYXRpb24gaW5jbHVkZXMgdGhlCmZvbGxvd2luZyBlbGVtZW50czoKCkBpdGVtaXplIEBtaW51cwpAaXRlbQpUZXhhcyBJbnN0cnVtZW50cyBPTUFQMzEwIFN5c3RlbS1vbi1jaGlwIChBUk0gOTI1VCBjb3JlKQpAaXRlbQpST00gYW5kIFJBTSBtZW1vcmllcyAoUk9NIGZpcm13YXJlIGltYWdlIGNhbiBiZSBsb2FkZWQgd2l0aCAtb3B0aW9uLXJvbSkKQGl0ZW0KT24tY2hpcCBMQ0QgY29udHJvbGxlcgpAaXRlbQpPbi1jaGlwIFJlYWwgVGltZSBDbG9jawpAaXRlbQpUSSBUU0MyMTAyaSB0b3VjaHNjcmVlbiBjb250cm9sbGVyIC8gYW5hbG9nLWRpZ2l0YWwgY29udmVydGVyIC8gQXVkaW8KQ09ERUMsIGNvbm5lY3RlZCB0aHJvdWdoIE1pY3JvV2lyZSBhbmQgSUBtYXRoe14yfVMgYnVzc2VzCkBpdGVtCkdQSU8tY29ubmVjdGVkIG1hdHJpeCBrZXlwYWQKQGl0ZW0KU2VjdXJlIERpZ2l0YWwgY2FyZCBjb25uZWN0ZWQgdG8gT01BUCBNTUMvU0QgaG9zdApAaXRlbQpUaHJlZSBvbi1jaGlwIFVBUlRzCkBlbmQgaXRlbWl6ZQoKTm9raWEgTjgwMCBhbmQgTjgxMCBpbnRlcm5ldCB0YWJsZXRzIChrbm93biBhbHNvIGFzIFJYLTM0IGFuZCBSWC00NCAvIDQ4KQplbXVsYXRpb24gc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBlbGVtZW50czoKCkBpdGVtaXplIEBtaW51cwpAaXRlbQpUZXhhcyBJbnN0cnVtZW50cyBPTUFQMjQyMCBTeXN0ZW0tb24tY2hpcCAoQVJNIDExMzYgY29yZSkKQGl0ZW0KUkFNIGFuZCBub24tdm9sYXRpbGUgT25lTkFORCBGbGFzaCBtZW1vcmllcwpAaXRlbQpEaXNwbGF5IGNvbm5lY3RlZCB0byBFUFNPTiByZW1vdGUgZnJhbWVidWZmZXIgY2hpcCBhbmQgT01BUCBvbi1jaGlwCmRpc3BsYXkgY29udHJvbGxlciBhbmQgYSBMUzA0MXkzIE1JUEkgREJJLUMgY29udHJvbGxlcgpAaXRlbQpUSSBUU0MyMzAxIChpbiBOODAwKSBhbmQgVEkgVFNDMjAwNSAoaW4gTjgxMCkgdG91Y2hzY3JlZW4gY29udHJvbGxlcnMKZHJpdmVuIHRocm91Z2ggU1BJIGJ1cwpAaXRlbQpOYXRpb25hbCBTZW1pY29uZHVjdG9yIExNODMyMy1jb250cm9sbGVkIHF3ZXJ0eSBrZXlib2FyZCBkcml2ZW4KdGhyb3VnaCBJQG1hdGh7XjJ9QyBidXMKQGl0ZW0KU2VjdXJlIERpZ2l0YWwgY2FyZCBjb25uZWN0ZWQgdG8gT01BUCBNTUMvU0QgaG9zdApAaXRlbQpUaHJlZSBPTUFQIG9uLWNoaXAgVUFSVHMgYW5kIG9uLWNoaXAgU1RJIGRlYnVnZ2luZyBjb25zb2xlCkBpdGVtCkEgQmx1ZXRvb3RoKFIpIHRyYW5zY2lldmVyIGFuZCBIQ0kgY29ubmVjdGVkIHRvIGFuIFVBUlQKQGl0ZW0KTWVudG9yIEdyYXBoaWNzICJJbnZlbnRyYSIgZHVhbC1yb2xlIFVTQiBjb250cm9sbGVyIGVtYmVkZGVkIGluIGEgVEkKVFVTQjYwMTAgY2hpcCAtIG9ubHkgVVNCIGhvc3QgbW9kZSBpcyBzdXBwb3J0ZWQKQGl0ZW0KVEkgVE1QMTA1IHRlbXBlcmF0dXJlIHNlbnNvciBkcml2ZW4gdGhyb3VnaCBJQG1hdGh7XjJ9QyBidXMKQGl0ZW0KVEkgVFdMOTIyMzBDIHBvd2VyIG1hbmFnZW1lbnQgY29tcGFuaW9uIHdpdGggYW4gUlRDIG9uIElAbWF0aHteMn1DIGJ1cwpAaXRlbQpOb2tpYSBSRVRVIGFuZCBUQUhWTyBtdWx0aS1wdXJwb3NlIGNoaXBzIHdpdGggYW4gUlRDLCBjb25uZWN0ZWQKdGhyb3VnaCBDQlVTCkBlbmQgaXRlbWl6ZQoKVGhlIEx1bWluYXJ5IE1pY3JvIFN0ZWxsYXJpcyBMTTNTODExRVZCIGVtdWxhdGlvbiBpbmNsdWRlcyB0aGUgZm9sbG93aW5nCmRldmljZXM6CgpAaXRlbWl6ZSBAbWludXMKQGl0ZW0KQ29ydGV4LU0zIENQVSBjb3JlLgpAaXRlbQo2NGsgRmxhc2ggYW5kIDhrIFNSQU0uCkBpdGVtClRpbWVycywgVUFSVHMsIEFEQyBhbmQgSUBtYXRoe14yfUMgaW50ZXJmYWNlLgpAaXRlbQpPU1JBTSBQaWN0aXZhIDk2eDE2IE9MRUQgd2l0aCBTU0QwMzAzIGNvbnRyb2xsZXIgb24gSUBtYXRoe14yfUMgYnVzLgpAZW5kIGl0ZW1pemUKClRoZSBMdW1pbmFyeSBNaWNybyBTdGVsbGFyaXMgTE0zUzY5NjVFVkIgZW11bGF0aW9uIGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcKZGV2aWNlczoKCkBpdGVtaXplIEBtaW51cwpAaXRlbQpDb3J0ZXgtTTMgQ1BVIGNvcmUuCkBpdGVtCjI1NmsgRmxhc2ggYW5kIDY0ayBTUkFNLgpAaXRlbQpUaW1lcnMsIFVBUlRzLCBBREMsIElAbWF0aHteMn1DIGFuZCBTU0kgaW50ZXJmYWNlcy4KQGl0ZW0KT1NSQU0gUGljdGl2YSAxMjh4NjQgT0xFRCB3aXRoIFNTRDAzMjMgY29udHJvbGxlciBjb25uZWN0ZWQgdmlhIFNTSS4KQGVuZCBpdGVtaXplCgpUaGUgRnJlZWNvbSBNdXNpY1BhbCBpbnRlcm5ldCByYWRpbyBlbXVsYXRpb24gaW5jbHVkZXMgdGhlIGZvbGxvd2luZwplbGVtZW50czoKCkBpdGVtaXplIEBtaW51cwpAaXRlbQpNYXJ2ZWxsIE1WODhXODYxOCBBUk0gY29yZS4KQGl0ZW0KMzIgTUIgUkFNLCAyNTYgS0IgU1JBTSwgOCBNQiBmbGFzaC4KQGl0ZW0KVXAgdG8gMiAxNjU1MCBVQVJUcwpAaXRlbQpNVjg4Vzh4eDggRXRoZXJuZXQgY29udHJvbGxlcgpAaXRlbQpNVjg4Vzg2MTggYXVkaW8gY29udHJvbGxlciwgV004NzUwIENPREVDIGFuZCBtaXhlcgpAaXRlbQoxMjjXNjQgZGlzcGxheSB3aXRoIGJyaWdodG5lc3MgY29udHJvbApAaXRlbQoyIGJ1dHRvbnMsIDIgbmF2aWdhdGlvbiB3aGVlbHMgd2l0aCBidXR0b24gZnVuY3Rpb24KQGVuZCBpdGVtaXplCgpUaGUgU2llbWVucyBTWDEgbW9kZWxzIHYxIGFuZCB2MiAoZGVmYXVsdCkgYmFzaWMgZW11bGF0aW9uLgpUaGUgZW11bGF0b24gaW5jbHVkZXMgdGhlIGZvbGxvd2luZyBlbGVtZW50czoKCkBpdGVtaXplIEBtaW51cwpAaXRlbQpUZXhhcyBJbnN0cnVtZW50cyBPTUFQMzEwIFN5c3RlbS1vbi1jaGlwIChBUk0gOTI1VCBjb3JlKQpAaXRlbQpST00gYW5kIFJBTSBtZW1vcmllcyAoUk9NIGZpcm13YXJlIGltYWdlIGNhbiBiZSBsb2FkZWQgd2l0aCAtcGZsYXNoKQpWMQoxIEZsYXNoIG9mIDE2TUIgYW5kIDEgRmxhc2ggb2YgOE1CClYyCjEgRmxhc2ggb2YgMzJNQgpAaXRlbQpPbi1jaGlwIExDRCBjb250cm9sbGVyCkBpdGVtCk9uLWNoaXAgUmVhbCBUaW1lIENsb2NrCkBpdGVtClNlY3VyZSBEaWdpdGFsIGNhcmQgY29ubmVjdGVkIHRvIE9NQVAgTU1DL1NEIGhvc3QKQGl0ZW0KVGhyZWUgb24tY2hpcCBVQVJUcwpAZW5kIGl0ZW1pemUKCkEgTGludXggMi42IHRlc3QgaW1hZ2UgaXMgYXZhaWxhYmxlIG9uIHRoZSBRRU1VIHdlYiBzaXRlLiBNb3JlCmluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgUUVNVSBtYWlsaW5nLWxpc3QgYXJjaGl2ZS4KCkBjIG1hbiBiZWdpbiBPUFRJT05TCgpUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIHNwZWNpZmljIHRvIHRoZSBBUk0gZW11bGF0aW9uOgoKQHRhYmxlIEBvcHRpb24KCkBpdGVtIC1zZW1paG9zdGluZwpFbmFibGUgc2VtaWhvc3Rpbmcgc3lzY2FsbCBlbXVsYXRpb24uCgpPbiBBUk0gdGhpcyBpbXBsZW1lbnRzIHRoZSAiQW5nZWwiIGludGVyZmFjZS4KCk5vdGUgdGhhdCB0aGlzIGFsbG93cyBndWVzdCBkaXJlY3QgYWNjZXNzIHRvIHRoZSBob3N0IGZpbGVzeXN0ZW0sCnNvIHNob3VsZCBvbmx5IGJlIHVzZWQgd2l0aCB0cnVzdGVkIGd1ZXN0IE9TLgoKQGVuZCB0YWJsZQoKQG5vZGUgQ29sZEZpcmUgU3lzdGVtIGVtdWxhdG9yCkBzZWN0aW9uIENvbGRGaXJlIFN5c3RlbSBlbXVsYXRvcgoKVXNlIHRoZSBleGVjdXRhYmxlIEBmaWxle3FlbXUtc3lzdGVtLW02OGt9IHRvIHNpbXVsYXRlIGEgQ29sZEZpcmUgbWFjaGluZS4KVGhlIGVtdWxhdG9yIGlzIGFibGUgdG8gYm9vdCBhIHVDbGludXgga2VybmVsLgoKVGhlIE01MjA4RVZCIGVtdWxhdGlvbiBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIGRldmljZXM6CgpAaXRlbWl6ZSBAbWludXMKQGl0ZW0KTUNGNTIwOCBDb2xkRmlyZSBWMiBNaWNyb3Byb2Nlc3NvciAoSVNBIEErIHdpdGggRU1BQykuCkBpdGVtClRocmVlIFR3byBvbi1jaGlwIFVBUlRzLgpAaXRlbQpGYXN0IEV0aGVybmV0IENvbnRyb2xsZXIgKEZFQykKQGVuZCBpdGVtaXplCgpUaGUgQU41MjA2IGVtdWxhdGlvbiBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIGRldmljZXM6CgpAaXRlbWl6ZSBAbWludXMKQGl0ZW0KTUNGNTIwNiBDb2xkRmlyZSBWMiBNaWNyb3Byb2Nlc3Nvci4KQGl0ZW0KVHdvIG9uLWNoaXAgVUFSVHMuCkBlbmQgaXRlbWl6ZQoKQGMgbWFuIGJlZ2luIE9QVElPTlMKClRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgc3BlY2lmaWMgdG8gdGhlIEFSTSBlbXVsYXRpb246CgpAdGFibGUgQG9wdGlvbgoKQGl0ZW0gLXNlbWlob3N0aW5nCkVuYWJsZSBzZW1paG9zdGluZyBzeXNjYWxsIGVtdWxhdGlvbi4KCk9uIE02OEsgdGhpcyBpbXBsZW1lbnRzIHRoZSAiQ29sZEZpcmUgR0RCIiBpbnRlcmZhY2UgdXNlZCBieSBsaWJnbG9zcy4KCk5vdGUgdGhhdCB0aGlzIGFsbG93cyBndWVzdCBkaXJlY3QgYWNjZXNzIHRvIHRoZSBob3N0IGZpbGVzeXN0ZW0sCnNvIHNob3VsZCBvbmx5IGJlIHVzZWQgd2l0aCB0cnVzdGVkIGd1ZXN0IE9TLgoKQGVuZCB0YWJsZQoKQG5vZGUgUUVNVSBVc2VyIHNwYWNlIGVtdWxhdG9yCkBjaGFwdGVyIFFFTVUgVXNlciBzcGFjZSBlbXVsYXRvcgoKQG1lbnUKKiBTdXBwb3J0ZWQgT3BlcmF0aW5nIFN5c3RlbXMgOjoKKiBMaW51eCBVc2VyIHNwYWNlIGVtdWxhdG9yOjoKKiBNYWMgT1MgWC9EYXJ3aW4gVXNlciBzcGFjZSBlbXVsYXRvciA6OgoqIEJTRCBVc2VyIHNwYWNlIGVtdWxhdG9yIDo6CkBlbmQgbWVudQoKQG5vZGUgU3VwcG9ydGVkIE9wZXJhdGluZyBTeXN0ZW1zCkBzZWN0aW9uIFN1cHBvcnRlZCBPcGVyYXRpbmcgU3lzdGVtcwoKVGhlIGZvbGxvd2luZyBPUyBhcmUgc3VwcG9ydGVkIGluIHVzZXIgc3BhY2UgZW11bGF0aW9uOgoKQGl0ZW1pemUgQG1pbnVzCkBpdGVtCkxpbnV4IChyZWZlcnJlZCBhcyBxZW11LWxpbnV4LXVzZXIpCkBpdGVtCk1hYyBPUyBYL0RhcndpbiAocmVmZXJyZWQgYXMgcWVtdS1kYXJ3aW4tdXNlcikKQGl0ZW0KQlNEIChyZWZlcnJlZCBhcyBxZW11LWJzZC11c2VyKQpAZW5kIGl0ZW1pemUKCkBub2RlIExpbnV4IFVzZXIgc3BhY2UgZW11bGF0b3IKQHNlY3Rpb24gTGludXggVXNlciBzcGFjZSBlbXVsYXRvcgoKQG1lbnUKKiBRdWljayBTdGFydDo6CiogV2luZSBsYXVuY2g6OgoqIENvbW1hbmQgbGluZSBvcHRpb25zOjoKKiBPdGhlciBiaW5hcmllczo6CkBlbmQgbWVudQoKQG5vZGUgUXVpY2sgU3RhcnQKQHN1YnNlY3Rpb24gUXVpY2sgU3RhcnQKCkluIG9yZGVyIHRvIGxhdW5jaCBhIExpbnV4IHByb2Nlc3MsIFFFTVUgbmVlZHMgdGhlIHByb2Nlc3MgZXhlY3V0YWJsZQppdHNlbGYgYW5kIGFsbCB0aGUgdGFyZ2V0ICh4ODYpIGR5bmFtaWMgbGlicmFyaWVzIHVzZWQgYnkgaXQuCgpAaXRlbWl6ZQoKQGl0ZW0gT24geDg2LCB5b3UgY2FuIGp1c3QgdHJ5IHRvIGxhdW5jaCBhbnkgcHJvY2VzcyBieSB1c2luZyB0aGUgbmF0aXZlCmxpYnJhcmllczoKCkBleGFtcGxlCnFlbXUtaTM4NiAtTCAvIC9iaW4vbHMKQGVuZCBleGFtcGxlCgpAY29kZXstTCAvfSB0ZWxscyB0aGF0IHRoZSB4ODYgZHluYW1pYyBsaW5rZXIgbXVzdCBiZSBzZWFyY2hlZCB3aXRoIGEKQGZpbGV7L30gcHJlZml4LgoKQGl0ZW0gU2luY2UgUUVNVSBpcyBhbHNvIGEgbGludXggcHJvY2VzcywgeW91IGNhbiBsYXVuY2ggcWVtdSB3aXRoCnFlbXUgKE5PVEU6IHlvdSBjYW4gb25seSBkbyB0aGF0IGlmIHlvdSBjb21waWxlZCBRRU1VIGZyb20gdGhlIHNvdXJjZXMpOgoKQGV4YW1wbGUKcWVtdS1pMzg2IC1MIC8gcWVtdS1pMzg2IC1MIC8gL2Jpbi9scwpAZW5kIGV4YW1wbGUKCkBpdGVtIE9uIG5vbiB4ODYgQ1BVcywgeW91IG5lZWQgZmlyc3QgdG8gZG93bmxvYWQgYXQgbGVhc3QgYW4geDg2IGdsaWJjCihAZmlsZXtxZW11LXJ1bnRpbWUtaTM4Ni1YWFgtLnRhci5nen0gb24gdGhlIFFFTVUgd2ViIHBhZ2UpLiBFbnN1cmUgdGhhdApAY29kZXtMRF9MSUJSQVJZX1BBVEh9IGlzIG5vdCBzZXQ6CgpAZXhhbXBsZQp1bnNldCBMRF9MSUJSQVJZX1BBVEgKQGVuZCBleGFtcGxlCgpUaGVuIHlvdSBjYW4gbGF1bmNoIHRoZSBwcmVjb21waWxlZCBAZmlsZXtsc30geDg2IGV4ZWN1dGFibGU6CgpAZXhhbXBsZQpxZW11LWkzODYgdGVzdHMvaTM4Ni9scwpAZW5kIGV4YW1wbGUKWW91IGNhbiBsb29rIGF0IEBmaWxle3FlbXUtYmluZm10LWNvbmYuc2h9IHNvIHRoYXQKUUVNVSBpcyBhdXRvbWF0aWNhbGx5IGxhdW5jaGVkIGJ5IHRoZSBMaW51eCBrZXJuZWwgd2hlbiB5b3UgdHJ5IHRvCmxhdW5jaCB4ODYgZXhlY3V0YWJsZXMuIEl0IHJlcXVpcmVzIHRoZSBAY29kZXtiaW5mbXRfbWlzY30gbW9kdWxlIGluIHRoZQpMaW51eCBrZXJuZWwuCgpAaXRlbSBUaGUgeDg2IHZlcnNpb24gb2YgUUVNVSBpcyBhbHNvIGluY2x1ZGVkLiBZb3UgY2FuIHRyeSB3ZWlyZCB0aGluZ3Mgc3VjaCBhczoKQGV4YW1wbGUKcWVtdS1pMzg2IC91c3IvbG9jYWwvcWVtdS1pMzg2L2Jpbi9xZW11LWkzODYgXAogICAgICAgICAgL3Vzci9sb2NhbC9xZW11LWkzODYvYmluL2xzLWkzODYKQGVuZCBleGFtcGxlCgpAZW5kIGl0ZW1pemUKCkBub2RlIFdpbmUgbGF1bmNoCkBzdWJzZWN0aW9uIFdpbmUgbGF1bmNoCgpAaXRlbWl6ZQoKQGl0ZW0gRW5zdXJlIHRoYXQgeW91IGhhdmUgYSB3b3JraW5nIFFFTVUgd2l0aCB0aGUgeDg2IGdsaWJjCmRpc3RyaWJ1dGlvbiAoc2VlIHByZXZpb3VzIHNlY3Rpb24pLiBJbiBvcmRlciB0byB2ZXJpZnkgaXQsIHlvdSBtdXN0IGJlCmFibGUgdG8gZG86CgpAZXhhbXBsZQpxZW11LWkzODYgL3Vzci9sb2NhbC9xZW11LWkzODYvYmluL2xzLWkzODYKQGVuZCBleGFtcGxlCgpAaXRlbSBEb3dubG9hZCB0aGUgYmluYXJ5IHg4NiBXaW5lIGluc3RhbGwKKEBmaWxle3FlbXUtWFhYLWkzODYtd2luZS50YXIuZ3p9IG9uIHRoZSBRRU1VIHdlYiBwYWdlKS4KCkBpdGVtIENvbmZpZ3VyZSBXaW5lIG9uIHlvdXIgYWNjb3VudC4gTG9vayBhdCB0aGUgcHJvdmlkZWQgc2NyaXB0CkBmaWxley91c3IvbG9jYWwvcWVtdS1pMzg2L0AvYmluL3dpbmUtY29uZi5zaH0uIFlvdXIgcHJldmlvdXMKQGNvZGV7JEB7SE9NRUB9Ly53aW5lfSBkaXJlY3RvcnkgaXMgc2F2ZWQgdG8gQGNvZGV7JEB7SE9NRUB9Ly53aW5lLm9yZ30uCgpAaXRlbSBUaGVuIHlvdSBjYW4gdHJ5IHRoZSBleGFtcGxlIEBmaWxle3B1dHR5LmV4ZX06CgpAZXhhbXBsZQpxZW11LWkzODYgL3Vzci9sb2NhbC9xZW11LWkzODYvd2luZS9iaW4vd2luZSBcCiAgICAgICAgICAvdXNyL2xvY2FsL3FlbXUtaTM4Ni93aW5lL2MvUHJvZ3JhbVwgRmlsZXMvcHV0dHkuZXhlCkBlbmQgZXhhbXBsZQoKQGVuZCBpdGVtaXplCgpAbm9kZSBDb21tYW5kIGxpbmUgb3B0aW9ucwpAc3Vic2VjdGlvbiBDb21tYW5kIGxpbmUgb3B0aW9ucwoKQGV4YW1wbGUKdXNhZ2U6IHFlbXUtaTM4NiBbLWhdIFstZF0gWy1MIHBhdGhdIFstcyBzaXplXSBbLWNwdSBtb2RlbF0gWy1nIHBvcnRdIHByb2dyYW0gW2FyZ3VtZW50cy4uLl0KQGVuZCBleGFtcGxlCgpAdGFibGUgQG9wdGlvbgpAaXRlbSAtaApQcmludCB0aGUgaGVscApAaXRlbSAtTCBwYXRoClNldCB0aGUgeDg2IGVsZiBpbnRlcnByZXRlciBwcmVmaXggKGRlZmF1bHQ9L3Vzci9sb2NhbC9xZW11LWkzODYpCkBpdGVtIC1zIHNpemUKU2V0IHRoZSB4ODYgc3RhY2sgc2l6ZSBpbiBieXRlcyAoZGVmYXVsdD01MjQyODgpCkBpdGVtIC1jcHUgbW9kZWwKU2VsZWN0IENQVSBtb2RlbCAoLWNwdSA/IGZvciBsaXN0IGFuZCBhZGRpdGlvbmFsIGZlYXR1cmUgc2VsZWN0aW9uKQpAZW5kIHRhYmxlCgpEZWJ1ZyBvcHRpb25zOgoKQHRhYmxlIEBvcHRpb24KQGl0ZW0gLWQKQWN0aXZhdGUgbG9nIChsb2dmaWxlPS90bXAvcWVtdS5sb2cpCkBpdGVtIC1wIHBhZ2VzaXplCkFjdCBhcyBpZiB0aGUgaG9zdCBwYWdlIHNpemUgd2FzICdwYWdlc2l6ZScgYnl0ZXMKQGl0ZW0gLWcgcG9ydApXYWl0IGdkYiBjb25uZWN0aW9uIHRvIHBvcnQKQGVuZCB0YWJsZQoKRW52aXJvbm1lbnQgdmFyaWFibGVzOgoKQHRhYmxlIEBlbnYKQGl0ZW0gUUVNVV9TVFJBQ0UKUHJpbnQgc3lzdGVtIGNhbGxzIGFuZCBhcmd1bWVudHMgc2ltaWxhciB0byB0aGUgJ3N0cmFjZScgcHJvZ3JhbQooTk9URTogdGhlIGFjdHVhbCAnc3RyYWNlJyBwcm9ncmFtIHdpbGwgbm90IHdvcmsgYmVjYXVzZSB0aGUgdXNlcgpzcGFjZSBlbXVsYXRvciBoYXNuJ3QgaW1wbGVtZW50ZWQgcHRyYWNlKS4gIEF0IHRoZSBtb21lbnQgdGhpcyBpcwppbmNvbXBsZXRlLiAgQWxsIHN5c3RlbSBjYWxscyB0aGF0IGRvbid0IGhhdmUgYSBzcGVjaWZpYyBhcmd1bWVudApmb3JtYXQgYXJlIHByaW50ZWQgd2l0aCBpbmZvcm1hdGlvbiBmb3Igc2l4IGFyZ3VtZW50cy4gIE1hbnkKZmxhZy1zdHlsZSBhcmd1bWVudHMgZG9uJ3QgaGF2ZSBkZWNvZGVycyBhbmQgd2lsbCBzaG93IHVwIGFzIG51bWJlcnMuCkBlbmQgdGFibGUKCkBub2RlIE90aGVyIGJpbmFyaWVzCkBzdWJzZWN0aW9uIE90aGVyIGJpbmFyaWVzCgpAY29tbWFuZHtxZW11LWFybX0gaXMgYWxzbyBjYXBhYmxlIG9mIHJ1bm5pbmcgQVJNICJBbmdlbCIgc2VtaWhvc3RlZCBFTEYKYmluYXJpZXMgKGFzIGltcGxlbWVudGVkIGJ5IHRoZSBhcm0tZWxmIGFuZCBhcm0tZWFiaSBOZXdsaWIvR0RCCmNvbmZpZ3VyYXRpb25zKSwgYW5kIGFybS11Y2xpbnV4IGJGTFQgZm9ybWF0IGJpbmFyaWVzLgoKQGNvbW1hbmR7cWVtdS1tNjhrfSBpcyBjYXBhYmxlIG9mIHJ1bm5pbmcgc2VtaWhvc3RlZCBiaW5hcmllcyB1c2luZyB0aGUgQkRNCihtNXh4eC1yYW0taG9zdGVkLmxkKSBvciBtNjhrLXNpbSAoc2ltLmxkKSBzeXNjYWxsIGludGVyZmFjZXMsIGFuZApjb2xkZmlyZSB1Q2xpbnV4IGJGTFQgZm9ybWF0IGJpbmFyaWVzLgoKVGhlIGJpbmFyeSBmb3JtYXQgaXMgZGV0ZWN0ZWQgYXV0b21hdGljYWxseS4KCkBjb21tYW5ke3FlbXUtc3BhcmN9IGNhbiBleGVjdXRlIFNwYXJjMzIgYmluYXJpZXMgKFNwYXJjMzIgQ1BVLCAzMiBiaXQgQUJJKS4KCkBjb21tYW5ke3FlbXUtc3BhcmMzMnBsdXN9IGNhbiBleGVjdXRlIFNwYXJjMzIgYW5kIFNQQVJDMzJQTFVTIGJpbmFyaWVzCihTcGFyYzY0IENQVSwgMzIgYml0IEFCSSkuCgpAY29tbWFuZHtxZW11LXNwYXJjNjR9IGNhbiBleGVjdXRlIHNvbWUgU3BhcmM2NCAoU3BhcmM2NCBDUFUsIDY0IGJpdCBBQkkpIGFuZApTUEFSQzMyUExVUyBiaW5hcmllcyAoU3BhcmM2NCBDUFUsIDMyIGJpdCBBQkkpLgoKQG5vZGUgTWFjIE9TIFgvRGFyd2luIFVzZXIgc3BhY2UgZW11bGF0b3IKQHNlY3Rpb24gTWFjIE9TIFgvRGFyd2luIFVzZXIgc3BhY2UgZW11bGF0b3IKCkBtZW51CiogTWFjIE9TIFgvRGFyd2luIFN0YXR1czo6CiogTWFjIE9TIFgvRGFyd2luIFF1aWNrIFN0YXJ0OjoKKiBNYWMgT1MgWC9EYXJ3aW4gQ29tbWFuZCBsaW5lIG9wdGlvbnM6OgpAZW5kIG1lbnUKCkBub2RlIE1hYyBPUyBYL0RhcndpbiBTdGF0dXMKQHN1YnNlY3Rpb24gTWFjIE9TIFgvRGFyd2luIFN0YXR1cwoKQGl0ZW1pemUgQG1pbnVzCkBpdGVtCnRhcmdldCB4ODYgb24geDg2OiBNb3N0IGFwcHMgKENvY29hIGFuZCBDYXJib24gdG9vKSB3b3Jrcy4gWzFdCkBpdGVtCnRhcmdldCBQb3dlclBDIG9uIHg4NjogTm90IHdvcmtpbmcgYXMgdGhlIHBwYyBjb21tcGFnZSBjYW4ndCBiZSBtYXBwZWQgKHlldCEpCkBpdGVtCnRhcmdldCBQb3dlclBDIG9uIFBvd2VyUEM6IE1vc3QgYXBwcyAoQ29jb2EgYW5kIENhcmJvbiB0b28pIHdvcmtzLiBbMV0KQGl0ZW0KdGFyZ2V0IHg4NiBvbiBQb3dlclBDOiBtb3N0IHV0aWxpdGllcyB3b3JrLiBDb2NvYSBhbmQgQ2FyYm9uIGFwcHMgYXJlIG5vdCB5ZXQgc3VwcG9ydGVkLgpAZW5kIGl0ZW1pemUKClsxXSBJZiB5b3UncmUgaG9zdCBjb21tcGFnZSBjYW4gYmUgZXhlY3V0ZWQgYnkgcWVtdS4KCkBub2RlIE1hYyBPUyBYL0RhcndpbiBRdWljayBTdGFydApAc3Vic2VjdGlvbiBRdWljayBTdGFydAoKSW4gb3JkZXIgdG8gbGF1bmNoIGEgTWFjIE9TIFgvRGFyd2luIHByb2Nlc3MsIFFFTVUgbmVlZHMgdGhlIHByb2Nlc3MgZXhlY3V0YWJsZQppdHNlbGYgYW5kIGFsbCB0aGUgdGFyZ2V0IGR5bmFtaWMgbGlicmFyaWVzIHVzZWQgYnkgaXQuIElmIHlvdSBkb24ndCBoYXZlIHRoZSBGQVQKbGlicmFyaWVzICh5b3UncmUgcnVubmluZyBNYWMgT1MgWC9wcGMpIHlvdSdsbCBuZWVkIHRvIG9idGFpbiBpdCBmcm9tIGEgTWFjIE9TIFgKQ0Qgb3IgY29tcGlsZSB0aGVtIGJ5IGhhbmQuCgpAaXRlbWl6ZQoKQGl0ZW0gT24geDg2LCB5b3UgY2FuIGp1c3QgdHJ5IHRvIGxhdW5jaCBhbnkgcHJvY2VzcyBieSB1c2luZyB0aGUgbmF0aXZlCmxpYnJhcmllczoKCkBleGFtcGxlCnFlbXUtaTM4NiAvYmluL2xzCkBlbmQgZXhhbXBsZQoKb3IgdG8gcnVuIHRoZSBwcGMgdmVyc2lvbiBvZiB0aGUgZXhlY3V0YWJsZToKCkBleGFtcGxlCnFlbXUtcHBjIC9iaW4vbHMKQGVuZCBleGFtcGxlCgpAaXRlbSBPbiBwcGMsIHlvdSdsbCBoYXZlIHRvIHRlbGwgcWVtdSB3aGVyZSB5b3VyIHg4NiBsaWJyYXJpZXMgKGFuZCBkeW5hbWljIGxpbmtlcikKYXJlIGluc3RhbGxlZDoKCkBleGFtcGxlCnFlbXUtaTM4NiAtTCAvb3B0L3g4Nl9yb290LyAvYmluL2xzCkBlbmQgZXhhbXBsZQoKQGNvZGV7LUwgL29wdC94ODZfcm9vdC99IHRlbGxzIHRoYXQgdGhlIGR5bmFtaWMgbGlua2VyIChkeWxkKSBwYXRoIGlzIGluCkBmaWxley9vcHQveDg2X3Jvb3QvdXNyL2Jpbi9keWxkfS4KCkBlbmQgaXRlbWl6ZQoKQG5vZGUgTWFjIE9TIFgvRGFyd2luIENvbW1hbmQgbGluZSBvcHRpb25zCkBzdWJzZWN0aW9uIENvbW1hbmQgbGluZSBvcHRpb25zCgpAZXhhbXBsZQp1c2FnZTogcWVtdS1pMzg2IFstaF0gWy1kXSBbLUwgcGF0aF0gWy1zIHNpemVdIHByb2dyYW0gW2FyZ3VtZW50cy4uLl0KQGVuZCBleGFtcGxlCgpAdGFibGUgQG9wdGlvbgpAaXRlbSAtaApQcmludCB0aGUgaGVscApAaXRlbSAtTCBwYXRoClNldCB0aGUgbGlicmFyeSByb290IHBhdGggKGRlZmF1bHQ9LykKQGl0ZW0gLXMgc2l6ZQpTZXQgdGhlIHN0YWNrIHNpemUgaW4gYnl0ZXMgKGRlZmF1bHQ9NTI0Mjg4KQpAZW5kIHRhYmxlCgpEZWJ1ZyBvcHRpb25zOgoKQHRhYmxlIEBvcHRpb24KQGl0ZW0gLWQKQWN0aXZhdGUgbG9nIChsb2dmaWxlPS90bXAvcWVtdS5sb2cpCkBpdGVtIC1wIHBhZ2VzaXplCkFjdCBhcyBpZiB0aGUgaG9zdCBwYWdlIHNpemUgd2FzICdwYWdlc2l6ZScgYnl0ZXMKQGVuZCB0YWJsZQoKQG5vZGUgQlNEIFVzZXIgc3BhY2UgZW11bGF0b3IKQHNlY3Rpb24gQlNEIFVzZXIgc3BhY2UgZW11bGF0b3IKCkBtZW51CiogQlNEIFN0YXR1czo6CiogQlNEIFF1aWNrIFN0YXJ0OjoKKiBCU0QgQ29tbWFuZCBsaW5lIG9wdGlvbnM6OgpAZW5kIG1lbnUKCkBub2RlIEJTRCBTdGF0dXMKQHN1YnNlY3Rpb24gQlNEIFN0YXR1cwoKQGl0ZW1pemUgQG1pbnVzCkBpdGVtCnRhcmdldCBTcGFyYzY0IG9uIFNwYXJjNjQ6IFNvbWUgdHJpdmlhbCBwcm9ncmFtcyB3b3JrLgpAZW5kIGl0ZW1pemUKCkBub2RlIEJTRCBRdWljayBTdGFydApAc3Vic2VjdGlvbiBRdWljayBTdGFydAoKSW4gb3JkZXIgdG8gbGF1bmNoIGEgQlNEIHByb2Nlc3MsIFFFTVUgbmVlZHMgdGhlIHByb2Nlc3MgZXhlY3V0YWJsZQppdHNlbGYgYW5kIGFsbCB0aGUgdGFyZ2V0IGR5bmFtaWMgbGlicmFyaWVzIHVzZWQgYnkgaXQuCgpAaXRlbWl6ZQoKQGl0ZW0gT24gU3BhcmM2NCwgeW91IGNhbiBqdXN0IHRyeSB0byBsYXVuY2ggYW55IHByb2Nlc3MgYnkgdXNpbmcgdGhlIG5hdGl2ZQpsaWJyYXJpZXM6CgpAZXhhbXBsZQpxZW11LXNwYXJjNjQgL2Jpbi9scwpAZW5kIGV4YW1wbGUKCkBlbmQgaXRlbWl6ZQoKQG5vZGUgQlNEIENvbW1hbmQgbGluZSBvcHRpb25zCkBzdWJzZWN0aW9uIENvbW1hbmQgbGluZSBvcHRpb25zCgpAZXhhbXBsZQp1c2FnZTogcWVtdS1zcGFyYzY0IFstaF0gWy1kXSBbLUwgcGF0aF0gWy1zIHNpemVdIFstYnNkIHR5cGVdIHByb2dyYW0gW2FyZ3VtZW50cy4uLl0KQGVuZCBleGFtcGxlCgpAdGFibGUgQG9wdGlvbgpAaXRlbSAtaApQcmludCB0aGUgaGVscApAaXRlbSAtTCBwYXRoClNldCB0aGUgbGlicmFyeSByb290IHBhdGggKGRlZmF1bHQ9LykKQGl0ZW0gLXMgc2l6ZQpTZXQgdGhlIHN0YWNrIHNpemUgaW4gYnl0ZXMgKGRlZmF1bHQ9NTI0Mjg4KQpAaXRlbSAtYnNkIHR5cGUKU2V0IHRoZSB0eXBlIG9mIHRoZSBlbXVsYXRlZCBCU0QgT3BlcmF0aW5nIHN5c3RlbS4gVmFsaWQgdmFsdWVzIGFyZQpGcmVlQlNELCBOZXRCU0QgYW5kIE9wZW5CU0QgKGRlZmF1bHQpLgpAZW5kIHRhYmxlCgpEZWJ1ZyBvcHRpb25zOgoKQHRhYmxlIEBvcHRpb24KQGl0ZW0gLWQKQWN0aXZhdGUgbG9nIChsb2dmaWxlPS90bXAvcWVtdS5sb2cpCkBpdGVtIC1wIHBhZ2VzaXplCkFjdCBhcyBpZiB0aGUgaG9zdCBwYWdlIHNpemUgd2FzICdwYWdlc2l6ZScgYnl0ZXMKQGVuZCB0YWJsZQoKQG5vZGUgY29tcGlsYXRpb24KQGNoYXB0ZXIgQ29tcGlsYXRpb24gZnJvbSB0aGUgc291cmNlcwoKQG1lbnUKKiBMaW51eC9Vbml4OjoKKiBXaW5kb3dzOjoKKiBDcm9zcyBjb21waWxhdGlvbiBmb3IgV2luZG93cyB3aXRoIExpbnV4OjoKKiBNYWMgT1MgWDo6CkBlbmQgbWVudQoKQG5vZGUgTGludXgvVW5peApAc2VjdGlvbiBMaW51eC9Vbml4CgpAc3Vic2VjdGlvbiBDb21waWxhdGlvbgoKRmlyc3QgeW91IG11c3QgZGVjb21wcmVzcyB0aGUgc291cmNlczoKQGV4YW1wbGUKY2QgL3RtcAp0YXIgenh2ZiBxZW11LXgueS56LnRhci5negpjZCBxZW11LXgueS56CkBlbmQgZXhhbXBsZQoKVGhlbiB5b3UgY29uZmlndXJlIFFFTVUgYW5kIGJ1aWxkIGl0ICh1c3VhbGx5IG5vIG9wdGlvbnMgYXJlIG5lZWRlZCk6CkBleGFtcGxlCi4vY29uZmlndXJlCm1ha2UKQGVuZCBleGFtcGxlCgpUaGVuIHR5cGUgYXMgcm9vdCB1c2VyOgpAZXhhbXBsZQptYWtlIGluc3RhbGwKQGVuZCBleGFtcGxlCnRvIGluc3RhbGwgUUVNVSBpbiBAZmlsZXsvdXNyL2xvY2FsfS4KCkBzdWJzZWN0aW9uIEdDQyB2ZXJzaW9uCgpJbiBvcmRlciB0byBjb21waWxlIFFFTVUgc3VjY2Vzc2Z1bGx5LCBpdCBpcyB2ZXJ5IGltcG9ydGFudCB0aGF0IHlvdQpoYXZlIHRoZSByaWdodCB0b29scy4gVGhlIG1vc3QgaW1wb3J0YW50IG9uZSBpcyBnY2MuIE9uIG1vc3QgaG9zdHMgYW5kCmluIHBhcnRpY3VsYXIgb24geDg2IG9uZXMsIEBlbXBoe2djYyA0LnggaXMgbm90IHN1cHBvcnRlZH0uIElmIHlvdXIKTGludXggZGlzdHJpYnV0aW9uIGluY2x1ZGVzIGEgZ2NjIDQueCBjb21waWxlciwgeW91IGNhbiB1c3VhbGx5Cmluc3RhbGwgYW4gb2xkZXIgdmVyc2lvbiAoaXQgaXMgaW52b2tlZCBieSBAY29kZXtnY2MzMn0gb3IKQGNvZGV7Z2NjMzR9KS4gVGhlIFFFTVUgY29uZmlndXJlIHNjcmlwdCBhdXRvbWF0aWNhbGx5IHByb2JlcyBmb3IKdGhlc2Ugb2xkZXIgdmVyc2lvbnMgc28gdGhhdCB1c3VhbGx5IHlvdSBkb24ndCBoYXZlIHRvIGRvIGFueXRoaW5nLgoKQG5vZGUgV2luZG93cwpAc2VjdGlvbiBXaW5kb3dzCgpAaXRlbWl6ZQpAaXRlbSBJbnN0YWxsIHRoZSBjdXJyZW50IHZlcnNpb25zIG9mIE1TWVMgYW5kIE1pbkdXIGZyb20KQHVybHtodHRwOi8vd3d3Lm1pbmd3Lm9yZy99LiBZb3UgY2FuIGZpbmQgZGV0YWlsZWQgaW5zdGFsbGF0aW9uCmluc3RydWN0aW9ucyBpbiB0aGUgZG93bmxvYWQgc2VjdGlvbiBhbmQgdGhlIEZBUS4KCkBpdGVtIERvd25sb2FkCnRoZSBNaW5HVyBkZXZlbG9wbWVudCBsaWJyYXJ5IG9mIFNETCAxLjIueAooQGZpbGV7U0RMLWRldmVsLTEuMi54LUAvbWluZ3czMi50YXIuZ3p9KSBmcm9tCkB1cmx7aHR0cDovL3d3dy5saWJzZGwub3JnfS4gVW5wYWNrIGl0IGluIGEgdGVtcG9yYXJ5IHBsYWNlLCBhbmQKdW5wYWNrIHRoZSBhcmNoaXZlIEBmaWxle2kzODYtbWluZ3czMm1zdmMudGFyLmd6fSBpbiB0aGUgTWluR1cgdG9vbApkaXJlY3RvcnkuIEVkaXQgdGhlIEBmaWxle3NkbC1jb25maWd9IHNjcmlwdCBzbyB0aGF0IGl0IGdpdmVzIHRoZQpjb3JyZWN0IFNETCBkaXJlY3Rvcnkgd2hlbiBpbnZva2VkLgoKQGl0ZW0gRXh0cmFjdCB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIFFFTVUuCgpAaXRlbSBTdGFydCB0aGUgTVNZUyBzaGVsbCAoZmlsZSBAZmlsZXttc3lzLmJhdH0pLgoKQGl0ZW0gQ2hhbmdlIHRvIHRoZSBRRU1VIGRpcmVjdG9yeS4gTGF1bmNoIEBmaWxley4vY29uZmlndXJlfSBhbmQKQGZpbGV7bWFrZX0uICBJZiB5b3UgaGF2ZSBwcm9ibGVtcyB1c2luZyBTREwsIHZlcmlmeSB0aGF0CkBmaWxle3NkbC1jb25maWd9IGNhbiBiZSBsYXVuY2hlZCBmcm9tIHRoZSBNU1lTIGNvbW1hbmQgbGluZS4KCkBpdGVtIFlvdSBjYW4gaW5zdGFsbCBRRU1VIGluIEBmaWxle1Byb2dyYW0gRmlsZXMvUWVtdX0gYnkgdHlwaW5nCkBmaWxle21ha2UgaW5zdGFsbH0uIERvbid0IGZvcmdldCB0byBjb3B5IEBmaWxle1NETC5kbGx9IGluCkBmaWxle1Byb2dyYW0gRmlsZXMvUWVtdX0uCgpAZW5kIGl0ZW1pemUKCkBub2RlIENyb3NzIGNvbXBpbGF0aW9uIGZvciBXaW5kb3dzIHdpdGggTGludXgKQHNlY3Rpb24gQ3Jvc3MgY29tcGlsYXRpb24gZm9yIFdpbmRvd3Mgd2l0aCBMaW51eAoKQGl0ZW1pemUKQGl0ZW0KSW5zdGFsbCB0aGUgTWluR1cgY3Jvc3MgY29tcGlsYXRpb24gdG9vbHMgYXZhaWxhYmxlIGF0CkB1cmx7aHR0cDovL3d3dy5taW5ndy5vcmcvfS4KCkBpdGVtCkluc3RhbGwgdGhlIFdpbjMyIHZlcnNpb24gb2YgU0RMIChAdXJse2h0dHA6Ly93d3cubGlic2RsLm9yZ30pIGJ5CnVucGFja2luZyBAZmlsZXtpMzg2LW1pbmd3MzJtc3ZjLnRhci5nen0uIFNldCB1cCB0aGUgUEFUSCBlbnZpcm9ubWVudAp2YXJpYWJsZSBzbyB0aGF0IEBmaWxle2kzODYtbWluZ3czMm1zdmMtc2RsLWNvbmZpZ30gY2FuIGJlIGxhdW5jaGVkIGJ5CnRoZSBRRU1VIGNvbmZpZ3VyYXRpb24gc2NyaXB0LgoKQGl0ZW0KQ29uZmlndXJlIFFFTVUgZm9yIFdpbmRvd3MgY3Jvc3MgY29tcGlsYXRpb246CkBleGFtcGxlCi4vY29uZmlndXJlIC0tZW5hYmxlLW1pbmd3MzIKQGVuZCBleGFtcGxlCklmIG5lY2Vzc2FyeSwgeW91IGNhbiBjaGFuZ2UgdGhlIGNyb3NzLXByZWZpeCBhY2NvcmRpbmcgdG8gdGhlIHByZWZpeApjaG9zZW4gZm9yIHRoZSBNaW5HVyB0b29scyB3aXRoIC0tY3Jvc3MtcHJlZml4LiBZb3UgY2FuIGFsc28gdXNlCi0tcHJlZml4IHRvIHNldCB0aGUgV2luMzIgaW5zdGFsbCBwYXRoLgoKQGl0ZW0gWW91IGNhbiBpbnN0YWxsIFFFTVUgaW4gdGhlIGluc3RhbGxhdGlvbiBkaXJlY3RvcnkgYnkgdHlwaW5nCkBmaWxle21ha2UgaW5zdGFsbH0uIERvbid0IGZvcmdldCB0byBjb3B5IEBmaWxle1NETC5kbGx9IGluIHRoZQppbnN0YWxsYXRpb24gZGlyZWN0b3J5LgoKQGVuZCBpdGVtaXplCgpOb3RlOiBDdXJyZW50bHksIFdpbmUgZG9lcyBub3Qgc2VlbSBhYmxlIHRvIGxhdW5jaApRRU1VIGZvciBXaW4zMi4KCkBub2RlIE1hYyBPUyBYCkBzZWN0aW9uIE1hYyBPUyBYCgpUaGUgTWFjIE9TIFggcGF0Y2hlcyBhcmUgbm90IGZ1bGx5IG1lcmdlZCBpbiBRRU1VLCBzbyB5b3Ugc2hvdWxkIGxvb2sKYXQgdGhlIFFFTVUgbWFpbGluZyBsaXN0IGFyY2hpdmUgdG8gaGF2ZSBhbGwgdGhlIG5lY2Vzc2FyeQppbmZvcm1hdGlvbi4KCkBub2RlIEluZGV4CkBjaGFwdGVyIEluZGV4CkBwcmludGluZGV4IGNwCgpAYnllCg==