VGhpcyBmaWxlIGNvbnRhaW5zIGEgbGlzdCBvZiBwZW9wbGUgd2hvIGFyZSByZXNwb25zaWJsZSBmb3IgY2VydGFpbiBwYXJ0cyBvZgp0aGUgSEFQcm94eSBwcm9qZWN0IGFuZCB3aG8gaGF2ZSBhdXRob3JpdHkgb24gdGhlbS4gVGhpcyBtZWFucyB0aGF0IHRoZXNlCnBlb3BsZSBoYXZlIHRvIGJlIGNvbnN1bHRlZCBiZWZvcmUgZG9pbmcgYW55IGNoYW5nZSBpbiB0aGUgcGFydHMgdGhleSBtYWludGFpbiwKaW5jbHVkaW5nIHdoZW4gZml4aW5nIGJ1Z3MuIFRoZXNlIHBlcnNvbnMgYXJlIGFsbG93ZWQgdG8gcmVqZWN0IGFueSBjaGFuZ2Ugb24KdGhlIHBhcnRzIHRoZXkgbWFpbnRhaW4sIGFuZCBpbiBwYXJhbGxlbCB0aGV5IHRyeSB0aGVpciBiZXN0IHRvIGVuc3VyZSB0aGVzZQpwYXJ0cyB3b3JrIHdlbGwuIFNpbWlsYXJseSwgYW55IGNoYW5nZSB0byB0aGVzZSBwYXJ0cyBub3QgYmVpbmcgdmFsaWRhdGVkIGJ5CnRoZW0gd2lsbCBiZSByZWplY3RlZC4KClRoZSBiZXN0IHdheSB0byBkZWFsIHdpdGggc3VjaCBzdWJzeXN0ZW1zIHdoZW4gc2VuZGluZyBwYXRjaGVzIGlzIHRvIHNlbmQgdGhlCnBhdGNoZXMgdG8gdGhlIG1haWxpbmcgbGlzdCBhbmQgdG8gQ0MgdGhlc2UgcGVvcGxlLiBXaGVuIG5vIG1haW50YWluZXIgaXMKbGlzdGVkIGZvciBhIHN1YnN5c3RlbSwgeW91IGNhbiBzaW1wbHkgc2VuZCB5b3VyIGNoYW5nZXMgdGhlIHVzdWFsIHdheSwgYW5kIGl0CmlzIGFsc28gYSBzaWduIHRoYXQgaWYgeW91IHdhbnQgdG8gc3RyZW5ndGhlbiB5b3VyIHNraWxscyBvbiBjZXJ0YWluIHBhcnRzIHlvdQpjYW4gYmVjb21lIHlvdXJzZWxmIGEgbWFpbnRhaW5lciBvZiB0aGUgcGFydHMgeW91IGNhcmUgYSBsb3QgYWJvdXQuCgpQbGVhc2UgZG8gbm90IGFzayB0aGVtIHRvIHRyb3VibGVzaG9vdCB5b3VyIGJ1Z3MsIGl0J3Mgbm90IHRoZWlyIGpvYiBldmVudGhvdWdoCnRoZXkgbWF5IG9jY2FzaW9uYWxseSBoZWxwIGFzIHRpbWUgcGVybWl0cy4KCkxpc3Qgb2YgbWFpbnRhaW5lcnMKLS0tLS0tLS0tLS0tLS0tLS0tLQoKTHVhCk1haW50YWluZXI6IFRoaWVycnkgRm91cm5pZXIgPHRmb3VybmllckBhcnBhbGVydC5vcmc+CkZpbGVzOiBzcmMvaGx1YS5jLCBpbmNsdWRlLyovaGx1YS5oCgpNYXBzIGFuZCBwYXR0ZXJuIG1hdGNoaW5nCk1haW50YWluZXI6IFRoaWVycnkgRm91cm5pZXIgPHRmb3VybmllckBhcnBhbGVydC5vcmc+CkZpbGVzOiBzcmMvbWFwLmMsIHNyYy9wYXR0ZXJuLmMsIGluY2x1ZGUvKi9tYXAuaCwgaW5jbHVkZS8qL3BhdHRlcm4uaAoKRE5TCk1haW50YWluZXI6IEJhcHRpc3RlIEFzc21hbm4gPGJlZGlzOUBnbWFpbC5jb20+CkZpbGVzOiBzcmMvZG5zLmMsIGluY2x1ZGUvKi9kbnMuaAoKU1NMCk1haW50YWluZXI6IEVtZXJpYyBCcnVuIDxlYnJ1bkBoYXByb3h5LmNvbT4sIFdpbGxpYW0gTGFsbGVtYW5kIDx3bGFsbGVtYW5kQGhhcHJveHkuY29tPgpGaWxlczogc3JjL2NmZ3BhcnNlLXNzbC5jLCBzcmMvc3NsXyouYywgaW5jbHVkZS8qL3NzbF8qLmgKClBlZXJzCk1haW50YWluZXI6IEVtZXJpYyBCcnVuIDxlYnJ1bkBoYXByb3h5LmNvbT4KRmlsZXM6IHNyYy9wZWVycy5jLCBpbmNsdWRlLyovcGVlcnMuaAoKRG9jIHRvIEhUTUwgY29udmVydGVyIChkY29udikKTWFpbnRhaW5lcjogQ3lyaWwgQm9udOkgPGN5cmlsLmJvbnRlQGZyZWUuZnI+CkZpbGVzOiBkb2MvKi50eHQKTm90ZTogYXNrIEN5cmlsIGJlZm9yZSBjaGFuZ2luZyBhbnkgZG9jJ3MgZm9ybWF0IG9yIHN0cnVjdHVyZS4KCkhlYWx0aCBjaGVja3MKRmlsZXM6IHNyYy9jaGVja3MuYywgaW5jbHVkZS8qL2NoZWNrcy5oCk1haW50YWluZXJzOiBTaW1vbiBIb3JtYW4gZm9yIGV4dGVybmFsLWNoZWNrLCBCYXB0aXN0ZSBBc3NtYW5uIGZvciB0Y3AtY2hlY2sKTm90ZTogaGVhbHRoIGNoZWNrcyBhcmUgZnJhZ2lsZSBhbmQgaGF2ZSBiZWVuIGJyb2tlbiBtYW55IHRpbWVzLCBzbyBwbGVhc2UKICAgICAgY29uc3VsdCB0aGUgcmVsZXZhbnQgbWFpbnRhaW5lcnMgaWYgeW91IHdhbnQgdG8gY2hhbmdlIHRoZXNlIHNwZWNpZmljCiAgICAgIHBhcnRzLgoKTWFpbGVycwpNYWludGFpbmVyOiBTaW1vbiBIb3JtYW4gPGhvcm1zQHZlcmdlLm5ldC5hdT4KRmlsZXM6IHNyYy9tYWlsZXJzLmMsIGluY2x1ZGUvKi9tYWlsZXJzLmgKCkRldmljZUF0bGFzIGRldmljZSBpZGVudGlmaWNhdGlvbgpNYWludGFpbmVyOiBEYXZpZCBDYXJsaWVyIDxkY2FybGllckBhZmlsaWFzLmluZm8+CkZpbGVzOiBzcmMvZGEuYywgaW5jbHVkZS8qL2RhLmgKCjUxRGVncmVlcyBkZXZpY2UgaWRlbnRpZmljYXRpb24KTWFpbnRhaW5lcjogQmVuIFNoaWxsaXRvIDxiZW5ANTFkZWdyZWVzLmNvbT4KRmlsZXM6IHNyYy81MWQuYwoKQ2FjaGUKTWFpbnRhaW5lcjogV2lsbGlhbSBMYWxsZW1hbmQgPHdsYWxsZW1hbmRAaGFwcm94eS5jb20+CkZpbGVzOiBzcmMvY2FjaGUuYywgaW5jbHVkZS8qL2NhY2hlLmgKCk1hc3Rlci13b3JrZXIKTWFpbnRhaW5lcjogV2lsbGlhbSBMYWxsZW1hbmQgPHdsYWxsZW1hbmRAaGFwcm94eS5jb20+Ck5vdGU6IFBsZWFzZSBDQyBXaWxsaWFtIHdoZW4gdG91Y2hpbmcgc3JjL2hhcHJveHkuYyBhbmQgY29udHJpYi9zeXN0ZW1kCgpTUE9FCk1haW50YWluZXI6IENocmlzdG9waGVyIEZhdWxldCA8Y2ZhdWxldEBoYXByb3h5LmNvbT4KRmlsZXM6IHNyYy9mbHRfc3BvZS5jLCBpbmNsdWRlLyovc3BvZS5oLCBjb250cmliL3Nwb2FfZXhhbXBsZSwgZG9jL1NQT0UudHh0CgpNdWx0aS10aHJlYWRpbmcKTWFpbnRhaW5lcjogQ2hyaXN0b3BoZXIgRmF1bGV0IDxjZmF1bGV0QGhhcHJveHkuY29tPgpNYWludGFpbmVyOiBFbWVyaWMgQnJ1biA8ZWJydW5AaGFwcm94eS5jb20+CkZpbGVzOiBzcmMvdGhyZWFkLmMsIGluY2x1ZGUvKi90aHJlYWQuaApOb3RlOiBldmVyeSBjaGFuZ2UgYXJvdW5kIHRoZSBsb2NraW5nIG9yIHN5bmNocm9uaXphdGlvbiBwb2ludCB3aWxsIHJlcXVpcmUKICAgICAgYXBwcm92YWwgZnJvbSBvbmUgb2YgdGhlc2UgbWFpbnRhaW5lcnMuIFByb2JsZW1zIHdoaWNoIG9ubHkgYXBwZWFyIHdoZW4KICAgICAgbmJ0aHJlYWQgaXMgZ3JlYXRlciB0aGFuIDEgYW5kIHdoaWNoIGRpc2FwcGVhciBvdGhlcndpc2UgYXJlIGFsc28KICAgICAgcmVsZXZhbnQuCgpTY2llbnRpYU1vYmlsZSBXVVJGTCBEZXZpY2UgRGV0ZWN0aW9uCk1haW50YWluZXI6IFBhdWwgQm9yaWxlLCBNYXNzaW1pbGlhbm8gQmVsbG9taSA8d3VyZmwtaGFwcm94eS1zdXBwb3J0QHNjaWVudGlhbW9iaWxlLmNvbT4KRmlsZXM6IHNyYy93dXJmbC5jCg==