IwojICAgUGFydHMgb2YgdGhlIGRldmVsb3BtZW50IGVmZm9ydCBmb3IgdGhpcyBwcm9qZWN0IGhhdmUgYmVlbgojICAgc3BvbnNvcmVkIGJ5IFNJRU1FTlMgQUcsIEF1c3RyaWEuIFRoYW5rcyB0byBTSUVNRU5TIGZvcgojICAgc3VwcG9ydGluZyBhbiBPcGVuIFNvdXJjZSBwcm9qZWN0IQojCiMKIyAgIFRoaXMgaXMgYXQgbGVhc3QgYSBwYXJ0aWFsIGNyZWRpdHMtZmlsZSBvZiBpbmRpdmlkdWFsIHBlb3BsZSB0aGF0CiMgICBoYXZlIGNvbnRyaWJ1dGVkIHRvIHRoZSBVLUJvb3QgcHJvamVjdC4gSXQgaXMgc29ydGVkIGJ5IG5hbWUgYW5kCiMgICBmb3JtYXR0ZWQgdG8gYWxsb3cgZWFzeSBncmVwcGluZyBhbmQgYmVhdXRpZmljYXRpb24gYnkgc2NyaXB0cy4KIyAgIFRoZSBmaWVsZHMgYXJlOiBuYW1lIChOKSwgZW1haWwgKEUpLCB3ZWItYWRkcmVzcyAoVyksIFBHUCBrZXkgSUQKIyAgIGFuZCBmaW5nZXJwcmludCAoUCksIGRlc2NyaXB0aW9uIChEKSwgYW5kIHNuYWlsLW1haWwgYWRkcmVzcyAoUykuCiMgICBUaGFua3MsCiMKIyAgICAgICAgICAgICAgICAgICAgICAgV29sZmdhbmcgRGVuawojLS0tLS0tLS0tLQoKTjogRHIuIEJydW5vIEFjaGF1ZXIKRTogYnJ1bm9AZXhldC1hZy5kZQpEOiBTdXBwb3J0IGZvciBOZXRCU0QgKGJvdGggYXMgaG9zdCBhbmQgdGFyZ2V0IHN5c3RlbSkKCk46IFN3ZW4gQW5kZXJzb24KRTogc2FuZEBwZXBwZXJjb24uZGUKRDogRVJJQyBTdXBwb3J0CgpOOiBHdWlsbGF1bWUgQWxleGFuZHJlCkU6IGd1aWxsYXVtZS5hbGV4YW5kcmVAZ2VzcGFjLmNoCkQ6IEFkZCBQQ0lQUEM2IGNvbmZpZ3VyYXRpb24KCk46IFBhbnRlbGlzIEFudG9uaW91CkU6IHBhbnRvQGludHJhY29tLmdyCkQ6IE5FVFZJQSBib2FyZCBzdXBwb3J0LCBBUlRPUyBzdXBwb3J0LgoKTjogUGllcnJlIEF1YmVydApFOiA8cC5hdWJlcnRAc3RhdWJsaS5jb20+CkQ6IFN1cHBvcnQgZm9yIFJQWENsYXNzaWMgYm9hcmQKCk46IEplcnJ5IHZhbiBCYXJlbgpFOiA8dmFuYmFyZW5AY2lkZWFzLmNvbT4KRDogQmVkQnVnIHBvcnQgdG8gNjAzZSBjb3JlIChNUEM4Mnh4KS4gQ29kZSBmb3IgZW5oYW5jZWQgbWVtb3J5IHRlc3QuCgpOOiBBbmRyZSBCZWF1ZGluCkU6IDxhbmRyZS5iZWF1ZGluQGNvbHVicmlzLmNvbT4KRDogUENNQ0lBLCBFdGhlcm5ldCwgVEZUUAoKTjogSm9uIEJlbmVkaWt0c3NvbgpFOiBqb25iQG1hcmVsLmlzCkQ6IFN1cHBvcnQgZm9yIE1hcmVsIFYzNyBib2FyZAoKTjogUmFwaGFlbCBCb3NzZWsKRTogcmFwaGFlbC5ib3NzZWtAc29sdXRpb25zNGxpbnV4LmRlCkQ6IDh4eHJvbS0wLjMuMAoKTjogUmljayBCcm9uc29uCkU6IHJpY2tAZWZuLm9yZwpEOiBBdG1lbCBBVDkxUk05MjAwREsgYW5kIE5BTkQgc3VwcG9ydAoKTjogRGF2aWQgQnJvd24KRTogREJyb3duMDNAaGFycmlzLmNvbQpEOiBFeHRlbnNpb25zIHRvIDh4eHJvbS0wLjMuMAoKTjogT2xpdmVyIEJyb3duCkU6IG9icm93bkBhZHZlbnRuZXR3b3Jrcy5jb20KRDogUG9ydCB0byB0aGUgZ3c4MjYwIGJvYXJkCgpOOiBKb25hdGhhbiBEZSBCcnV5bmUKRTogam9uYXRoYW4uZGVicnV5bmVAc2llbWVucy5hdGVhLmJlCkQ6IFBvcnQgdG8gU2llbWVucyBJQUQyMTAgYm9hcmQKCk46IEtlbiBDaG91CkU6IGtjaG91QGllZWUub3JnCkQ6IFN1cHBvcnQgZm9yIEEzMDAwIFNCQyBib2FyZAoKTjogQ29ubiBDbGFyawpFOiBjbGFya0Blc3RlZW0uY29tCkQ6IEVTVEVFTTE5MkUgc3VwcG9ydAoKTjogTWFnbnVzIERhbW0KRTogZXJhbWRhbUBraWVyYXkxLnAueS5raS5lcmEuZXJpY3Nzb24uc2UKRDogOHh4cm9tCgpOOiBBcnVuIERoYXJhbmthcgpFOiBBRGhhcmFua2FyQEFUVEJJLkNvbQpEOiB0aHJlYWRzIC8gc2NoZWR1bGVyIGV4YW1wbGUgY29kZQoKTjogS+FyaSBEYXbt8HNzb24KRToga2RAZmxhZ2EuaXMKRDogRkxBR0EgRE0gU3VwcG9ydAoKTjogV29sZmdhbmcgRGVuawpFOiB3ZEBkZW54LmRlCkQ6IFUtQm9vdCBpbml0aWFsIHZlcnNpb24sIGNvbnRpbnVpbmcgbWFpbnRlbmFuY2UsIEFSTUJvb3QgbWVyZ2UKVzogaHR0cDovL3d3dy5kZW54LmRlCgpOOiBEYW4gQS4gRGlja2V5CkU6IGRkaWNrZXlAY2hhcnRlci5uZXQKRDogRkFEUyBTdXBwb3J0CgpOOiBKYW1lcyBGLiBEb3VnaGVydHkKRTogamZkQEdpZ2FiaXROZXR3b3Jrcy5DT00KRDogUG9ydCB0byB0aGUgTU9VU1NFIGJvYXJkCgpOOiBEYXZlIEVsbGlzCkU6IERHRUBzaXhuZXRpby5jb20KRDogRUVQUk9NIFNwZWVkdXAsIFNYTkk4NTVUIHBvcnQKCk46IERhbmllbCBFbmdzdHL2bQpFOiBkYW5pZWxAb21pY3Jvbi5zZQpEOiB4ODYgcG9ydCwgU3VwcG9ydCBmb3Igc2M1MjBfY2RwIGJvYXJkCgpOOiBEci4gV29sZmdhbmcgR3JhbmRlZ2dlcgpFOiB3Z0BkZW54LmRlCkQ6IFN1cHBvcnQgZm9yIEludGVycGhhc2UgNDUzOSBUMS9FMS9KMSBQTUMsIFBONjIsIENDTSwgU0NNIGJvYXJkcwpXOiB3d3cuZGVueC5kZQoKTjogUGV0ZXIgRmlndWxpCkU6IHBlcG9zaEBldGMuc2sKRDogU3VwcG9ydCBmb3IgV0VQIEVQMjUwIChQWEEpIGJvYXJkCgpOOiBUaG9tYXMgRnJpZWRlbgpFOiBUaG9tYXNGQGh5cGVyaW9uLWVudGVydGFpbm1lbnQuY29tCkQ6IFN1cHBvcnQgZm9yIEFtaWdhT25lCgpOOiBGcmFuayBHb3R0c2NobGluZwpFOiBmZ290dHNjaGxpbmdAZWx0ZWMuZGUKRDogU3VwcG9ydCBmb3IgRUxURUMgTUhQQy9CQUI3eHgvRUxQUEMgYm9hcmRzLCBjZmItY29uc29sZSwgaTgwNDIsIFNNSSBMeW54RU0KVzogd3d3LmVsdGVjLmRlCgpOOiBNYXJpdXMgR3JvZWdlcgpFOiBtZ3JvZWdlckBzeXNnby5kZQpEOiBNQlggU3VwcG9ydCwgYm9hcmQgc3BlY2lmaWMgZnVuY3Rpb24gaW50ZXJmYWNlLCBFU1QgU0JDODI2MCBzdXBwb3J0OyBpbml0aWFsIHN1cHBvcnQgZm9yIFN0cm9uZ0FSTSAoTEFSVCksIEFSTTcyMFRETUkgKGltcGxlbWVudGEgQTcpClc6IHd3dy5lbGlub3MuY29tCgpOOiBLaXJrIEhhZGVybGllCkU6IGtoYWRlcmxpZUB2aXZpZGltYWdlLmNvbQpEOiBBZGRlZCBURlRQIHRvIDh4eHJvbSAoLT4gMC4zLjEpCgpOOiBDaHJpcyBIYWxsaW5hbgpFOiBjbGhAbmV0MXBsdXMuY29tCkQ6IERIQ1AgU3VwcG9ydAoKTjogQW5uZS1Tb3BoaWUgSGFybm9pcwpFOiBBbm5lLVNvcGhpZS5IYXJub2lzQG5leHRyZWFtLmZyCkQ6IFBvcnQgdG8gV2FsbnV0NDA1IGJvYXJkCgpOOiBBbmRyZWFzIEhlcHBlbApFOiBhaGVwcGVsQHN5c2dvLmRlCkQ6IENQVSBTdXBwb3J0IGZvciBNUEMgNzV4OyBib2FyZCBzdXBwb3J0IGZvciBFbHRlYyBCQUI3NTAgW29ic29sZXRlIV0KCk46IEF1Z3VzdCBIb2VyYWVuZGwKRTogYXVndXN0LmhvZXJhbmRsQGdteC5hdApEOiBTdXBwb3J0IGZvciB0aGUgbG9nb2RsIGJvYXJkIChQWEEyeHgpCgpOOiBKb3NoIEh1YmVyCkU6IGh1YmVyQGFsdW0ud3BpLmVkdQpEOiBQb3J0IHRvIHRoZSBHYWxpbGVvIEV2YWx1YXRpb24gQm9hcmQsIGFuZCB0aGUgTVBDNzR4eCBjcHUgc2VyaWVzLgpXOiBodHRwOi8vd3d3Lm1jbHguY29tLwoKSDogU3R1YXJ0IEh1Z2hlcwpFOiBzdHVhcnRoQGxpbmVvLmNvbQpEOiBQb3J0IHRvIE1QQzgyNjBBRFMgYm9hcmQKCkg6IFJpY2ggSXJlbGFuZApFOiByLmlyZWxhbmRAY29tcHV0ZXIub3JnCkQ6IEZQR0EgZGV2aWNlIGNvbmZpZ3VyYXRpb24gZHJpdmVyCgpOOiBHYXJ5IEplbm5lam9obgpFOiBnYXJ5akBqZW5uZWpvaG4ub3JnLCBnakBkZW54LmRlCkQ6IFN1cHBvcnQgZm9yIFNhbXN1bmcgQVJNOTIwVCBTM0MyNDAwWCwgQVJNOTIwVCAiVFJBQiIKVzogd3d3LmRlbnguZGUKCk46IE11cnJheSBKZW5zZW4KRTogTXVycmF5LkplbnNlbkBjbXN0LmNzaXJvLmF1CkQ6IEluaXRpYWwgODI2MCBzdXBwb3J0OyBHREIgc3VwcG9ydApEOiBQb3J0IHRvIENvZ2VudCtIeW1vZCBib2FyZHM7IEh5bW9kIEJvYXJkIERhdGFiYXNlClc6IGh0dHA6Ly93d3cubXNhLmNtc3QuY3Npcm8uYXUvb3Vyc3RhZmYvTXVycmF5SmVuc2VuL21qai5odG1sCgpOOiBZb28uIEpvbmdob29uCkU6IHlvb3RoQGlwb25lLmNvLmtyCkQ6IEFkZGVkIHBvcnQgdG8gdGhlIFJQWGxpdGUgYm9hcmQKCk46IEJyYWQgS2VtcApFOiBCcmFkLktlbXBAc2VyYW5vYS5jb20KRDogUG9ydCB0byBXaW5kcml2ZXIgcHBtYzgyNjAgYm9hcmQKCk46IFRob21hcyBLb2VsbGVyCkU6IHRrb2VsbGVyQGdteC5uZXQKRDogUG9ydCB0byBNb3Rvcm9sYSBTYW5kcG9pbnQgMyAoTVBDODI0MCkKCk46IFRob21hcyBMYW5nZQpFOiB0aG9tYXNAY29yZWxhdHVzLmNvbQpEOiBTdXBwb3J0IGZvciBHVEggYm9hcmQ7IGxvdHMgb2YgUENNQ0lBIGZpeGVzCgpOOiBUaGUgTEVPWCB0ZWFtCkU6IHRlYW1AbGVveC5vcmcKRDogU3VwcG9ydCBmb3IgTEVPWCBib2FyZHMsIERTMTY0eCBSVEMKVzogaHR0cDovL3d3dy5sZW94Lm9yZwoKTjogUmF5bW9uZCBMbwpFOiBsb0Byb3V0ZWZyZWUuY29tCkQ6IFN1cHBvcnQgZm9yIERPUyBwYXJ0aXRpb25zCgpOOiBEYW4gTWFsZWsKRTogZGFuQG5ldHg0LmNvbQpEOiBGQURTUk9NLCB0aGUgZ3JhbmRmYXRoZXIgb2YgYWxsIG9mIHRoaXMKCk46IFJlaW5oYXJkIE1leWVyCkU6IHIubWV5ZXJAZW1rLWVsZWt0cm9uaWsuZGUKRDogUG9ydCB0byBFTUsgVE9QODYwIE1vZHVsZQoKTjogSmF5IE1vbmttYW4KRToganRtQHNtb290aHNtb290aGllLmNvbQpEOiBFU1QgU0JDODI2MCBzdXBwb3J0CgpOOiBGcmFuayBNb3JhdWYKRTogZnJhbmsubW9yYXVmQHNhbHpicmVubmVyLmNvbQpEOiBTdXBwb3J0IGZvciBFbWJlZGRlZCBQbGFuZXQgUlBYIFN1cGVyIEJvYXJkCgpOOiBEYXZpZCBN/GxsZXIKRTogZC5tdWVsbGVyQGVsc29mdC5jaApEOiBTdXBwb3J0IGZvciBTYW1zdW5nIEFSTTkyMFQgU01ESzI0MTAgZXZhbCBib2FyZAoKTjogUm9sZiBPZmZlcm1hbm5zCkU6IHJvZkBzeXNnby5kZQpEOiBJbml0aWFsIHN1cHBvcnQgZm9yIFNTVi1ETlAxMTEwLCBTTUM5MTExMSBkcml2ZXIKVzogd3d3LmVsaW5vcy5jb20KCk46IEtlaXRoIE91dHdhdGVyCkU6IGtlaXRoX291dHdhdGVyQG12aXMuY29tCkQ6IFN1cHBvcnQgZm9yIGdlbmVyaWMvY3VzdG9tIE1QQzg2MFQgYm9hcmRzIChHRU44NjBULCBHRU44NjBUX1NDKQoKTjogRnJhbmsgUGFubm8KRTogZnBhbm5vQGRlbHBoaW50ZWNoLmNvbQpEOiBTdXBwb3J0IGZvciBFbWJlZGRlZCBQbGFuZXQgRVA4MjYwIEJvYXJkCgpOOiBEZW5pcyBQZXRlcgpFOiBkLnBldGVyQG1wbC5jaApEOiBTdXBwb3J0IGZvciA0eHggU0NTSSwgZmxvcHB5LCBDRFJPTSwgQ1Q2OTAwMCB2aWRlbywgLi4uCkQ6IFN1cHBvcnQgZm9yIFBJUDQwNSBib2FyZApEOiBTdXBwb3J0IGZvciBNSVA0MDUgYm9hcmQKCk46IEJpbGwgUGl0dHMKRTogd2xwQG1pbmRzcHJpbmcuY29tCkQ6IEJlZEJ1ZyBlbWJlZGRlZCBkZWJ1Z2dlciBjb2RlCgpOOiBTdGVmYW4gUm9lc2UKRTogc3RlZmFuLnJvZXNlQGVzZC1lbGVjdHJvbmljcy5jb20KRDogSUJNIFBQQzQwMS80MDMvNDA1R1AgU3VwcG9ydDsgV2luZG93cyBlbnZpcm9ubWVudCBzdXBwb3J0CgpOOiBFcndpbiBSb2wKRTogZXJ3aW5AbXVmZmluLm9yZwpEOiBib290IHN1cHBvcnQgZm9yIFJURU1TCgpOOiBOZWlsIFJ1c3NlbGwKRTogY2FyZXRAYy1zaWRlLmNvbQpEOiBBdXRob3Igb2YgTGlNb24tMS40LjIsIHdoaWNoIGNvbnRyaWJ1dGVkIHNvbWUgaWRlYXMKCk46IFBhb2xvIFNjYWZmYXJkaQpFOiBhcnNlbmlvQHRpbi5pdApEOiBGQURTODIzIGNvbmZpZ3VyYXRpb24sIE1QQzgyMyB2aWRlbyBzdXBwb3J0LCBJMkMsIHdpcmVsZXNzIGtleWJvYXJkLCBsb3RzIG1vcmUKCk46IFJvYmVydCBTY2h3ZWJlbApFOiByLnNjaHdlYmVsQHBlbmd1dHJvbml4LmRlCkQ6IFN1cHBvcnQgZm9yIGNzYjIyNiwgbG9nb2RsIGFuZCBpbm5va29tIGJvYXJkcyAoUFhBMnh4KQoKTjogUm9iIFRheWxvcgpFOiByb2J0QGZseWluZ3BpZy5jb20KRDogUG9ydCB0byBNQlg4NjBUIGFuZCBTYW5kcG9pbnQ4MjQwCgpOOiBFcmlrIFRoZWlzZW4KRTogZXRoZWlzZW5AbWluZHNwcmluZy5jb20KRDogTUJYOHh4IGFuZCBtYW55IG90aGVyIHBhdGNoZXMKCk46IEppbSBUaG9tcHNvbgpFOiBqaW1AbXVzZW5raS5jb20KRDogU3VwcG9ydCBmb3IgTVVTRU5LSSBib2FyZAoKTjogUnVuZSBUb3JnZXJzZW4KRTogPHJ1bmV0QGlubm92c3lzLmNvbT4KRDogU3VwcG9ydCBmb3IgTW90b3JvbGEgTVBDODI2NkFEUyBib2FyZAoKTjogRGF2aWQgVXBkZWdyYWZmCkU6IGRhdmVAY3JheS5jb20KRDogUG9ydCB0byBDcmF5IEwxIGJvYXJkOyBESENQIHZlbmRvciBleHRlbnNpb25zCgpOOiBNYXJ0aW4gV2luaXN0b2VyZmVyCkU6IG1hcnRpbndpbmlzdG9lcmZlckBnbXguY2gKRDogUG9ydCB0byBNUEM1NTUvNTU2IG1pY3JvY29udHJvbGxlcnMgYW5kIHN1cHBvcnQgZm9yIGNtaSBib2FyZAoKTjogQ2hyaXN0aWFuIFZlamxibwpFOiBjaHJpc3RpYW4udmVqbGJvQHRlbGxhYnMuY29tCkQ6IEZBRFM4NjBUIGV0aGVybmV0IHN1cHBvcnQKCk46IEpvaG4gWmhhbgpFOiB6aGFuekBzaW5vdmVlLmNvbQpEOiBTdXBwb3J0IGZvciBTaW5vVmVlIE1pY3Jvc3lzdGVtcyBTQzh4eCBTQkMKCk46IEFsZXggWnVlcGtlCkU6IGF6dUBzeXNnby5kZQpEOiBPdmVyYWxsIGltcHJvdmVtZW50cyBvbiBTdHJvbmdBUk0sIEFSTTcyMFRETUk7IFN1cHBvcnQgZm9yIFR1eHNjcmVlbjsgaW5pdGlhbCBQQ01DSUEgc3VwcG9ydCBmb3IgQVJNClc6IHd3dy5lbGlub3MuY29tCgpOOiBQYW50ZWxpcyBBbnRvbmlvdQpFOiBwYW50b0BpbnRyYWNvbS5ncgpEOiBORVRWSUEgYm9hcmQgc3VwcG9ydCwgQVJUT1Mgc3VwcG9ydC4K