RnJlcXVlbnRseSBBc2tlZCBRdWVzdGlvbnM6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PQpzdWJqZWN0OiB1bmlmaWVkIHpvcmFuIGRyaXZlciAoenIzNjB4Nywgem9yYW4sIGJ1eiwgZGMxMCgrKSwgZGMzMCgrKSwgbG1sMzMpCndlYnNpdGU6IGh0dHA6Ly9tanBlZy5zb3VyY2Vmb3JnZS5uZXQvZHJpdmVyLXpvcmFuLwoKMS4gV2hhdCBjYXJkcyBhcmUgc3VwcG9ydGVkCjEuMSBXaGF0IHRoZSBUViBkZWNvZGVyIGNhbiBkbyBhbiB3aGF0IG5vdAoxLjIgV2hhdCB0aGUgVFYgZW5jb2RlciBjYW4gZG8gYW4gd2hhdCBub3QKMi4gSG93IGRvIEkgZ2V0IHRoaXMgZGFtbiB0aGluZyB0byB3b3JrCjMuIFdoYXQgbWFpbmJvYXJkIHNob3VsZCBJIHVzZSAob3Igd2h5IGRvZXNuJ3QgbXkgY2FyZCB3b3JrKQo0LiBQcm9ncmFtbWluZyBpbnRlcmZhY2UKNS4gQXBwbGljYXRpb25zCjYuIENvbmNlcm5pbmcgYnVmZmVyIHNpemVzLCBxdWFsaXR5LCBvdXRwdXQgc2l6ZSBldGMuCjcuIEl0IGhhbmdzL2NyYXNoZXMvZmFpbHMvd2hhdGV2ZXJzISBIZWxwIQo4LiBNYWludGFpbmVycy9Db250YWN0aW5nCjkuIExpY2Vuc2UKCj09PT09PT09PT09PT09PT09PT09PT09PT09PQoKMS4gV2hhdCBjYXJkcyBhcmUgc3VwcG9ydGVkCgpJb21lZ2EgQnV6LCBMaW51eCBNZWRpYSBMYWJzIExNTDMzL0xNTDMzUjEwLCBQaW5uYWNsZS9NaXJvCkRDMTAvREMxMCsvREMzMC9EQzMwKyBhbmQgcmVsYXRlZCBib2FyZHMgKGF2YWlsYWJsZSB1bmRlciB2YXJpb3VzIG5hbWVzKS4KCklvbWVnYSBCdXo6CiogWm9yYW4genIzNjA2NyBQQ0kgY29udHJvbGxlcgoqIFpvcmFuIHpyMzYwNjAgTUpQRUcgY29kZWMKKiBQaGlsaXBzIHNhYTcxMTEgVFYgZGVjb2RlcgoqIFBoaWxpcHMgc2FhNzE4NSBUViBlbmNvZGVyCkRyaXZlcnMgdG8gdXNlOiB2aWRlb2RldiwgaTJjLWNvcmUsIGkyYy1hbGdvLWJpdCwKCQl2aWRlb2NvZGVjLCBzYWE3MTExLCBzYWE3MTg1LCB6cjM2MDYwLCB6cjM2MDY3CklucHV0cy9vdXRwdXRzOiBDb21wb3NpdGUgYW5kIFMtdmlkZW8KTm9ybXM6IFBBTCwgU0VDQU0gKDcyMHg1NzYgQCAyNSBmcHMpLCBOVFNDICg3MjB4NDgwIEAgMjkuOTcgZnBzKQpDYXJkIG51bWJlcjogNwoKQXZlck1lZGlhIDYgRXllcyBBVlM2RVlFUzoKKiBab3JhbiB6cjM2MDY3IFBDSSBjb250cm9sbGVyCiogWm9yYW4genIzNjA2MCBNSlBFRyBjb2RlYwoqIFNhbXN1bmcga3MwMTI3IFRWIGRlY29kZXIKKiBDb25leGFudCBidDg2NiAgVFYgZW5jb2RlcgpEcml2ZXJzIHRvIHVzZTogdmlkZW9kZXYsIGkyYy1jb3JlLCBpMmMtYWxnby1iaXQsCgkJdmlkZW9jb2RlYywga3MwMTI3LCBidDg2NiwgenIzNjA2MCwgenIzNjA2NwpJbnB1dHMvb3V0cHV0czogU2l4IHBoeXNpY2FsIGlucHV0cy4gMS02IGFyZSBjb21wb3NpdGUsCgkJMS0yLCAzLTQsIDUtNiBkb3VibGVzIGFzIFMtdmlkZW8sCgkJMS0zIHRyaXBsZXMgYXMgY29tcG9uZW50LgoJCU9uZSBjb21wb3NpdGUgb3V0cHV0LgpOb3JtczogUEFMLCBTRUNBTSAoNzIweDU3NiBAIDI1IGZwcyksIE5UU0MgKDcyMHg0ODAgQCAyOS45NyBmcHMpCkNhcmQgbnVtYmVyOiA4Ck5vdCBhdXRvZGV0ZWN0ZWQsIGNhcmQ9OCBpcyBuZWNlc3NhcnkuCgpMaW51eCBNZWRpYSBMYWJzIExNTDMzOgoqIFpvcmFuIHpyMzYwNjcgUENJIGNvbnRyb2xsZXIKKiBab3JhbiB6cjM2MDYwIE1KUEVHIGNvZGVjCiogQnJvb2t0cmVlIGJ0ODE5IFRWIGRlY29kZXIKKiBCcm9va3RyZWUgYnQ4NTYgVFYgZW5jb2RlcgpEcml2ZXJzIHRvIHVzZTogdmlkZW9kZXYsIGkyYy1jb3JlLCBpMmMtYWxnby1iaXQsCgkJdmlkZW9jb2RlYywgYnQ4MTksIGJ0ODU2LCB6cjM2MDYwLCB6cjM2MDY3CklucHV0cy9vdXRwdXRzOiBDb21wb3NpdGUgYW5kIFMtdmlkZW8KTm9ybXM6IFBBTCAoNzIweDU3NiBAIDI1IGZwcyksIE5UU0MgKDcyMHg0ODAgQCAyOS45NyBmcHMpCkNhcmQgbnVtYmVyOiA1CgpMaW51eCBNZWRpYSBMYWJzIExNTDMzUjEwOgoqIFpvcmFuIHpyMzYwNjcgUENJIGNvbnRyb2xsZXIKKiBab3JhbiB6cjM2MDYwIE1KUEVHIGNvZGVjCiogUGhpbGlwcyBzYWE3MTE0IFRWIGRlY29kZXIKKiBBbmFsb2cgRGV2aWNlcyBhZHY3MTcwIFRWIGVuY29kZXIKRHJpdmVycyB0byB1c2U6IHZpZGVvZGV2LCBpMmMtY29yZSwgaTJjLWFsZ28tYml0LAoJCXZpZGVvY29kZWMsIHNhYTcxMTQsIGFkdjcxNzAsIHpyMzYwNjAsIHpyMzYwNjcKSW5wdXRzL291dHB1dHM6IENvbXBvc2l0ZSBhbmQgUy12aWRlbwpOb3JtczogUEFMICg3MjB4NTc2IEAgMjUgZnBzKSwgTlRTQyAoNzIweDQ4MCBAIDI5Ljk3IGZwcykKQ2FyZCBudW1iZXI6IDYKClBpbm5hY2xlL01pcm8gREMxMChuZXcpOgoqIFpvcmFuIHpyMzYwNTcgUENJIGNvbnRyb2xsZXIKKiBab3JhbiB6cjM2MDYwIE1KUEVHIGNvZGVjCiogUGhpbGlwcyBzYWE3MTEwYSBUViBkZWNvZGVyCiogQW5hbG9nIERldmljZXMgYWR2NzE3NiBUViBlbmNvZGVyCkRyaXZlcnMgdG8gdXNlOiB2aWRlb2RldiwgaTJjLWNvcmUsIGkyYy1hbGdvLWJpdCwKCQl2aWRlb2NvZGVjLCBzYWE3MTEwLCBhZHY3MTc1LCB6cjM2MDYwLCB6cjM2MDY3CklucHV0cy9vdXRwdXRzOiBDb21wb3NpdGUsIFMtdmlkZW8gYW5kIEludGVybmFsCk5vcm1zOiBQQUwsIFNFQ0FNICg3Njh4NTc2IEAgMjUgZnBzKSwgTlRTQyAoNjQweDQ4MCBAIDI5Ljk3IGZwcykKQ2FyZCBudW1iZXI6IDEKClBpbm5hY2xlL01pcm8gREMxMCs6CiogWm9yYW4genIzNjA2NyBQQ0kgY29udHJvbGxlcgoqIFpvcmFuIHpyMzYwNjAgTUpQRUcgY29kZWMKKiBQaGlsaXBzIHNhYTcxMTBhIFRWIGRlY29kZXIKKiBBbmFsb2cgRGV2aWNlcyBhZHY3MTc2IFRWIGVuY29kZXIKRHJpdmVycyB0byB1c2U6IHZpZGVvZGV2LCBpMmMtY29yZSwgaTJjLWFsZ28tYml0LAoJCXZpZGVvY29kZWMsIHNhNzExMCwgYWR2NzE3NSwgenIzNjA2MCwgenIzNjA2NwpJbnB1dHMvb3V0cHV0czogQ29tcG9zaXRlLCBTLXZpZGVvIGFuZCBJbnRlcm5hbApOb3JtczogUEFMLCBTRUNBTSAoNzY4eDU3NiBAIDI1IGZwcyksIE5UU0MgKDY0MHg0ODAgQCAyOS45NyBmcHMpCkNhcmQgbnVtYmVyOiAyCgpQaW5uYWNsZS9NaXJvIERDMTAob2xkKTogKgoqIFpvcmFuIHpyMzYwNTcgUENJIGNvbnRyb2xsZXIKKiBab3JhbiB6cjM2MDUwIE1KUEVHIGNvZGVjCiogWm9yYW4genIzNjAxNiBWaWRlbyBGcm9udCBFbmQgb3IgRnVqaSBtZDAyMTEgVmlkZW8gRnJvbnQgRW5kIChjbG9uZT8pCiogTWljcm9uYXMgdnB4MzIyMGEgVFYgZGVjb2RlcgoqIG1zZTMwMDAgVFYgZW5jb2RlciBvciBBbmFsb2cgRGV2aWNlcyBhZHY3MTc2IFRWIGVuY29kZXIgKgpEcml2ZXJzIHRvIHVzZTogdmlkZW9kZXYsIGkyYy1jb3JlLCBpMmMtYWxnby1iaXQsCgkJdmlkZW9jb2RlYywgdnB4MzIyMCwgbXNlMzAwMC9hZHY3MTc1LCB6cjM2MDUwLCB6cjM2MDE2LCB6cjM2MDY3CklucHV0cy9vdXRwdXRzOiBDb21wb3NpdGUsIFMtdmlkZW8gYW5kIEludGVybmFsCk5vcm1zOiBQQUwsIFNFQ0FNICg3Njh4NTc2IEAgMjUgZnBzKSwgTlRTQyAoNjQweDQ4MCBAIDI5Ljk3IGZwcykKQ2FyZCBudW1iZXI6IDAKClBpbm5hY2xlL01pcm8gREMzMDogKgoqIFpvcmFuIHpyMzYwNTcgUENJIGNvbnRyb2xsZXIKKiBab3JhbiB6cjM2MDUwIE1KUEVHIGNvZGVjCiogWm9yYW4genIzNjAxNiBWaWRlbyBGcm9udCBFbmQKKiBNaWNyb25hcyB2cHgzMjI1ZC92cHgzMjIwYS92cHgzMjE2YiBUViBkZWNvZGVyCiogQW5hbG9nIERldmljZXMgYWR2NzE3NiBUViBlbmNvZGVyCkRyaXZlcnMgdG8gdXNlOiB2aWRlb2RldiwgaTJjLWNvcmUsIGkyYy1hbGdvLWJpdCwKCQl2aWRlb2NvZGVjLCB2cHgzMjIwL3ZweDMyMjQsIGFkdjcxNzUsIHpyMzYwNTAsIHpyMzYwMTYsIHpyMzYwNjcKSW5wdXRzL291dHB1dHM6IENvbXBvc2l0ZSwgUy12aWRlbyBhbmQgSW50ZXJuYWwKTm9ybXM6IFBBTCwgU0VDQU0gKDc2OHg1NzYgQCAyNSBmcHMpLCBOVFNDICg2NDB4NDgwIEAgMjkuOTcgZnBzKQpDYXJkIG51bWJlcjogMwoKUGlubmFjbGUvTWlybyBEQzMwKzogKgoqIFpvcmFuIHpyMzYwNjcgUENJIGNvbnRyb2xsZXIKKiBab3JhbiB6cjM2MDUwIE1KUEVHIGNvZGVjCiogWm9yYW4genIzNjAxNiBWaWRlbyBGcm9udCBFbmQKKiBNaWNyb25hcyB2cHgzMjI1ZC92cHgzMjIwYS92cHgzMjE2YiBUViBkZWNvZGVyCiogQW5hbG9nIERldmljZXMgYWR2NzE3NiBUViBlbmNvZGVyCkRyaXZlcnMgdG8gdXNlOiB2aWRlb2RldiwgaTJjLWNvcmUsIGkyYy1hbGdvLWJpdCwKCQl2aWRlb2NvZGVjLCB2cHgzMjIwL3ZweDMyMjQsIGFkdjcxNzUsIHpyMzYwNTAsIHpyMzYwMTUsIHpyMzYwNjcKSW5wdXRzL291dHB1dHM6IENvbXBvc2l0ZSwgUy12aWRlbyBhbmQgSW50ZXJuYWwKTm9ybXM6IFBBTCwgU0VDQU0gKDc2OHg1NzYgQCAyNSBmcHMpLCBOVFNDICg2NDB4NDgwIEAgMjkuOTcgZnBzKQpDYXJkIG51bWJlcjogNAoKTm90ZTogTm8gbW9kdWxlIGZvciB0aGUgbXNlMzAwMCBpcyBhdmFpbGFibGUgeWV0Ck5vdGU6IE5vIG1vZHVsZSBmb3IgdGhlIHZweDMyMjQgaXMgYXZhaWxhYmxlIHlldApOb3RlOiB1c2UgZW5jb2Rlcj1YIG9yIGRlY29kZXI9WCBmb3Igbm9uLWRlZmF1bHQgaTJjIGNoaXBzIChzZWUgaTJjLWlkLmgpCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT0KCjEuMSBXaGF0IHRoZSBUViBkZWNvZGVyIGNhbiBkbyBhbiB3aGF0IG5vdAoKVGhlIGJlc3Qga25vdyBUViBzdGFuZGFyZHMgYXJlIE5UU0MvUEFML1NFQ0FNLiBidXQgZm9yIGRlY29kaW5nIGEgZnJhbWUgdGhhdAppbmZvcm1hdGlvbiBpcyBub3QgZW5vdWdoLiBUaGVyZSBhcmUgc2V2ZXJhbCBmb3JtYXRzIG9mIHRoZSBUViBzdGFuZGFyZHMuCkFuZCBub3QgZXZlcnkgVFYgZGVjb2RlciBpcyBhYmxlIHRvIGhhbmRsZSBldmVyeSBmb3JtYXQuIEFsc28gdGhlIGV2ZXJ5CmNvbWJpbmF0aW9uIGlzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyLiBUaGVyZSBhcmUgY3VycmVudGx5IDExIGRpZmZlcmVudAp0diBicm9hZGNhc3QgZm9ybWF0cyBhbGwgYXZlciB0aGUgd29ybGQuCgpUaGUgQ0NJUiBkZWZpbmVzIHBhcmFtZXRlcnMgbmVlZGVkIGZvciBicm9hZGNhc3RpbmcgdGhlIHNpZ25hbC4KVGhlIENDSVIgaGFzIGRlZmluZWQgZGlmZmVyZW50IHN0YW5kYXJkczogQSxCLEQsRSxGLEcsRCxILEksSyxLMSxMLE0sTiwuLi4KVGhlIENDSVIgc2F5cyBub3QgbXVjaCBhYm91dCB0aGUgY29sb3JzeXN0ZW0gdXNlZCAhISEKQW5kIHRhbGtpbmcgYWJvdXQgYSBjb2xvcnN5c3RlbSBzYXlzIG5vdCB0byBtdWNoIGFib3V0IGhvdyBpdCBpcyBicm9hZGNhc3QuCgpUaGUgQ0NJUiBzdGFuZGFyZHMgQSxFLEYgYXJlIG5vdCB1c2VkIGFueSBtb3JlLgoKV2hlbiB5b3Ugc3BlYWsgYWJvdXQgTlRTQywgeW91IHVzdWFsbHkgbWVhbiB0aGUgc3RhbmRhcmQ6IENDSVIgLSBNIHVzaW5nCnRoZSBOVFNDIGNvbG9yc3lzdGVtIHdoaWNoIGlzIHVzZWQgaW4gdGhlIFVTQSwgSmFwYW4sIE1leGljbywgQ2FuYWRhCmFuZCBhIGZldyBvdGhlcnMuCgpXaGVuIHlvdSB0YWxrIGFib3V0IFBBTCwgeW91IHVzdWFsbHkgbWVhbjogQ0NJUiAtIEIvRyB1c2luZyB0aGUgUEFMCmNvbG9yc3lzdGVtIHdoaWNoIGlzIHVzZWQgaW4gbWFueSBDb3VudHJpZXMuCgpXaGVuIHlvdSB0YWxrIGFib3V0IFNFQ0FNLCB5b3UgbWVhbjogQ0NJUiAtIEwgdXNpbmcgdGhlIFNFQ0FNIENvbG9yc3lzdGVtCndoaWNoIGlzIHVzZWQgaW4gRnJhbmNlLCBhbmQgYSBmZXcgb3RoZXJzLgoKVGhlcmUgdGhlIG90aGVyIHZlcnNpb24gb2YgU0VDQU0sIENDSVIgLSBEL0sgaXMgdXNlZCBpbiBCdWxnYXJpYSwgQ2hpbmEsClNsb3Zha2FpLCBIdW5nYXJ5LCBLb3JlYSAoUmVwLiksIFBvbGFuZCwgUnVtYW5pYSBhbmQgYSBvdGhlcnMuCgpUaGUgQ0NJUiAtIEggdXNlcyB0aGUgUEFMIGNvbG9yc3lzdGVtIChzb21ldGltZXMgU0VDQU0pIGFuZCBpcyB1c2VkIGluCkVneXB0LCBMaWJ5YSwgU3JpIExhbmthLCBTeXJhaW4gQXJhYi4gUmVwLgoKVGhlIENDSVIgLSBJIHVzZXMgdGhlIFBBTCBjb2xvcnN5c3RlbSwgYW5kIGlzIHVzZWQgaW4gR3JlYXQgQnJpdGFpbiwgSG9uZyBLb25nLApJcmVsYW5kLCBOaWdlcmlhLCBTb3V0aCBBZnJpY2EuCgpUaGUgQ0NJUiAtIE4gdXNlcyB0aGUgUEFMIGNvbG9yc3lzdGVtIGFuZCBQQUwgZnJhbWUgc2l6ZSBidXQgdGhlIE5UU0MgZnJhbWVyYXRlLAphbmQgaXMgdXNlZCBpbiBBcmdlbnRpbmlhLCBVcnVndWF5LCBhbiBhIGZldyBvdGhlcnMKCldlIGRvIG5vdCB0YWxrIGFib3V0IGhvdyB0aGUgYXVkaW8gaXMgYnJvYWRjYXN0ICEKCkEgcmF0aGVyIGdvb2Qgc2l0ZXMgYWJvdXQgdGhlIFRWIHN0YW5kYXJkcyBhcmU6Cmh0dHA6Ly93d3cuc29ueS5qcC9TZXJ2aWNlQXJlYS9Wb2x0YWdlX21hcC8KaHR0cDovL2luZm8uZWxlY3Ryb25pY3dlcmtzdGF0dC5kZS9iZXJlaWNoZS9mZXJuc2VodGVjaG5pay9mcmVxdWVuemVuX3VuZF9ub3JtZW4vRmVybnNlaG5vcm1lbi8KYW5kIGh0dHA6Ly93d3cuY2FibC5jb20vcmVzdGF1cmFudC9jaGFubmVsLmh0bWwKCk90aGVyIHdlaXJkIHRoaW5ncyBhcm91bmQ6IE5UU0MgNC40MyBpcyBhIG1vZGlmaWNhdGVkIE5UU0MsIHdoaWNoIGlzIG1haW5seQp1c2VkIGluIFBBTCBWQ1IncyB0aGF0IGFyZSBhYmxlIHRvIHBsYXkgYmFjayBOVFNDLiBQQUwgNjAgc2VlbXMgdG8gYmUgdGhlIHNhbWUKYXMgTlRTQyA0LjQzIC4gVGhlIERhdGFzaGVldHMgYWxzbyB0YWxrIGFib3V0IE5UU0MgNDQsIEl0IHNlZW1zIGFzIGlmIGl0IHdvdWxkCmJlIHRoZSBzYW1lIGFzIE5UU0MgNC40My4KTlRTQyBDb21icyBzZWVtcyB0byBiZSBhIGRlY29kZXIgbW9kZSB3aGVyZSB0aGUgZGVjb2RlciB1c2VzIGEgY29tYiBmaWx0ZXIKdG8gc3BsaXQgY29tYSBhbmQgbHVtYSBpbnN0ZWFkIG9mIGEgRGVsYXkgbGluZS4KCkJ1dCBJIGRpZCBub3QgZGVmaWFudGx5IGZpbmQgb3V0IHdoYXQgTlRTQyBDb21iIGlzLgoKUGhpbGlwcyBzYWE3MTExIFRWIGRlY29kZXIKd2FzIGludHJvZHVjZWQgaW4gMTk5NywgaXMgdXNlZCBpbiB0aGUgQlVaIGFuZApjYW4gaGFuZGxlOiBQQUwgQi9HL0gvSSwgUEFMIE4sIFBBTCBNLCBOVFNDIE0sIE5UU0MgTiwgTlRTQyA0LjQzIGFuZCBTRUNBTQoKUGhpbGlwcyBzYWE3MTEwYSBUViBkZWNvZGVyCndhcyBpbnRyb2R1Y2VkIGluIDE5OTUsIGlzIHVzZWQgaW4gdGhlIFBpbm5hY2xlL01pcm8gREMxMChuZXcpLCBEQzEwKyBhbmQKY2FuIGhhbmRsZTogUEFMIEIvRywgTlRTQyBNIGFuZCBTRUNBTQoKUGhpbGlwcyBzYWE3MTE0IFRWIGRlY29kZXIKd2FzIGludHJvZHVjZWQgaW4gMjAwMCwgaXMgdXNlZCBpbiB0aGUgTE1MMzNSMTAgYW5kCmNhbiBoYW5kbGU6IFBBTCBCL0cvRC9IL0kvTiwgUEFMIE4sIFBBTCBNLCBOVFNDIE0sIE5UU0MgNC40MyBhbmQgU0VDQU0KCkJyb29rdHJlZSBidDgxOSBUViBkZWNvZGVyCndhcyBpbnRyb2R1Y2VkIGluIDE5OTYsIGFuZCBpcyB1c2VkIGluIHRoZSBMTUwzMyBhbmQKY2FuIGhhbmRsZTogUEFMIEIvRC9HL0gvSSwgTlRTQyBNCgpNaWNyb25hcyB2cHgzMjIwYSBUViBkZWNvZGVyCndhcyBpbnRyb2R1Y2VkIGluIDE5OTYsIGlzIHVzZWQgaW4gdGhlIERDMzAgYW5kIERDMzArIGFuZApjYW4gaGFuZGxlOiBQQUwgQi9HL0gvSSwgUEFMIE4sIFBBTCBNLCBOVFNDIE0sIE5UU0MgNDQsIFBBTCA2MCwgU0VDQU0sTlRTQyBDb21iCgpTYW1zdW5nIGtzMDEyNyBUViBkZWNvZGVyCmlzIHVzZWQgaW4gdGhlIEFWUzZFWUVTIGNhcmQgYW5kCmNhbiBoYW5kbGU6IE5UU0MtTS9OLzQ0LCBQQUwtTS9OL0IvRy9IL0kvRC9LL0wgYW5kIFNFQ0FNCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT0KCjEuMiBXaGF0IHRoZSBUViBlbmNvZGVyIGNhbiBkbyBhbiB3aGF0IG5vdAoKVGhlIFRWIGVuY29kZXIgYXJlIGRvaW5nIHRoZSAic2FtZSIgYXMgdGhlIGRlY29kZXIsIGJ1dCBpbiB0aGUgb2RlciBkaXJlY3Rpb24uCllvdSBmZWVkIHRoZW0gZGlnaXRhbCBkYXRhIGFuZCB0aGUgZ2VuZXJhdGUgYSBDb21wb3NpdGUgb3IgU1ZIUyBzaWduYWwuCkZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29sb3JzeXN0ZW1zIGFuZCBUViBub3JtIHRha2UgYSBsb29rIGluIHRoZQpUViBkZWNvZGVyIHNlY3Rpb24uCgpQaGlsaXBzIHNhYTcxODUgVFYgRW5jb2Rlcgp3YXMgaW50cm9kdWNlZCBpbiAxOTk2LCBpcyB1c2VkIGluIHRoZSBCVVoKY2FuIGdlbmVyYXRlOiBQQUwgQi9HLCBOVFNDIE0KCkJyb29rdHJlZSBidDg1NiBUViBFbmNvZGVyCndhcyBpbnRyb2R1Y2VkIGluIDE5OTQsIGlzIHVzZWQgaW4gdGhlIExNTDMzCmNhbiBnZW5lcmF0ZTogUEFMIEIvRC9HL0gvSS9OLCBQQUwgTSwgTlRTQyBNLCBQQUwtTiAoQXJnZW50aW5hKQoKQW5hbG9nIERldmljZXMgYWR2NzE3MCBUViBFbmNvZGVyCndhcyBpbnRyb2R1Y2VkIGluIDIwMDAsIGlzIHVzZWQgaW4gdGhlIExNTDMwMFIxMApjYW4gZ2VuZXJhdGU6IFBBTCBCL0QvRy9IL0kvTiwgUEFMIE0sIE5UU0MgTSwgUEFMIDYwCgpBbmFsb2cgRGV2aWNlcyBhZHY3MTc1IFRWIEVuY29kZXIKd2FzIGludHJvZHVjZWQgaW4gMTk5NiwgaXMgdXNlZCBpbiB0aGUgREMxMCwgREMxMCssIERDMTAgb2xkLCBEQzMwLCBEQzMwKwpjYW4gZ2VuZXJhdGU6IFBBTCBCL0QvRy9IL0kvTiwgUEFMIE0sIE5UU0MgTQoKSVRUIG1zZTMwMDAgVFYgZW5jb2Rlcgp3YXMgaW50cm9kdWNlZCBpbiAxOTkxLCBpcyB1c2VkIGluIHRoZSBEQzEwIG9sZApjYW4gZ2VuZXJhdGU6IFBBTCAsIE5UU0MgLCBTRUNBTQoKQ29uZXhhbnQgYnQ4NjYgVFYgZW5jb2RlcgppcyB1c2VkIGluIEFWUzZFWUVTLCBhbmQKY2FuIGdlbmVyYXRlOiBOVFNDL1BBTCwgUEFMrU0sIFBBTK1OCgpUaGUgYWR2NzE3eCwgc2hvdWxkIGJlIGFibGUgdG8gcHJvZHVjZSBQQUwgTi4gQnV0IHlvdSBmaW5kIG5vdGhpbmcgUEFMIE4Kc3BlY2lmaWMgaW4gdGhlIHJlZ2lzdGVycy4gU2VlbSB0aGF0IHlvdSBoYXZlIHRvIHJldXNlIGEgb3RoZXIgc3RhbmRhcmQKdG8gZ2VuZXJhdGUgUEFMIE4sIG1heWJlIGl0IHdvdWxkIHdvcmsgaWYgeW91IHVzZSB0aGUgUEFMIE0gc2V0dGluZ3MuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PQoKMi4gSG93IGRvIEkgZ2V0IHRoaXMgZGFtbiB0aGluZyB0byB3b3JrCgpMb2FkIHpyMzYwNjcuby4gSWYgaXQgY2FuJ3QgYXV0b2RldGVjdCB5b3VyIGNhcmQsIHVzZSB0aGUgY2FyZD1YIGluc21vZApvcHRpb24gd2l0aCBYIGJlaW5nIHRoZSBjYXJkIG51bWJlciBhcyBnaXZlbiBpbiB0aGUgcHJldmlvdXMgc2VjdGlvbi4KVG8gaGF2ZSBtb3JlIHRoYW4gb25lIGNhcmQsIHVzZSBjYXJkPVgxWyxYMlssWDMsW1g0Wy4uXV1dXQoKVG8gYXV0b21hdGUgdGhpcywgYWRkIHRoZSBmb2xsb3dpbmcgdG8geW91ciAvZXRjL21vZHByb2JlLmNvbmY6CgpvcHRpb25zIHpyMzYwNjcgY2FyZD1YMVssWDJbLFgzWyxYNFsuLl1dXV0KYWxpYXMgY2hhci1tYWpvci04MS0wIHpyMzYwNjcKCk9uZSB0aGluZyB0byBrZWVwIGluIG1pbmQgaXMgdGhhdCB0aGlzIGRvZXNuJ3QgbG9hZCB6cjM2MDY3Lm8gaXRzZWxmIHlldC4gSXQKanVzdCBhdXRvbWF0ZXMgbG9hZGluZy4gSWYgeW91IHN0YXJ0IHVzaW5nIHhhd3R2LCB0aGUgZGV2aWNlIHdvbid0IGxvYWQgb24Kc29tZSBzeXN0ZW1zLCBzaW5jZSB5b3UncmUgdHJ5aW5nIHRvIGxvYWQgbW9kdWxlcyBhcyBhIHVzZXIsIHdoaWNoIGlzIG5vdAphbGxvd2VkICgicGVybWlzc2lvbiBkZW5pZWQiKS4gQSBxdWljayB3b3JrYXJvdW5kIGlzIHRvIGFkZCAnTG9hZCAidjRsIicgdG8KWEY4NkNvbmZpZy00IHdoZW4geW91IHVzZSBYIGJ5IGRlZmF1bHQsIG9yIHRvIHJ1biAndjRsLWNvbmYgLWMgPGRldmljZT4nIGluCm9uZSBvZiB5b3VyIHN0YXJ0dXAgc2NyaXB0cyAobm9ybWFsbHkgcmMubG9jYWwpIGlmIHlvdSBkb24ndCB1c2UgWC4gQm90aAptYWtlIHN1cmUgdGhhdCB0aGUgbW9kdWxlcyBhcmUgbG9hZGVkIG9uIHN0YXJ0dXAsIHVuZGVyIHRoZSByb290IGFjY291bnQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT0KCjMuIFdoYXQgbWFpbmJvYXJkIHNob3VsZCBJIHVzZSAob3Igd2h5IGRvZXNuJ3QgbXkgY2FyZCB3b3JrKQoKPGluc2VydCBsb3VzeSBkaXNjbGFpbWVyIGhlcmU+LiBJbiBzaG9ydDogZ29vZD1TaVMvSW50ZWwsIGJhZD1WSUEuCgpFeHBlcmllbmNlIHRlbGxzIHVzIHRoYXQgcGVvcGxlIHdpdGggYSBCdXosIG9uIGF2ZXJhZ2UsIGhhdmUgbW9yZSBwcm9ibGVtcwp0aGFuIHVzZXJzIHdpdGggYSBEQzEwKy9MTUwzMy4gQWxzbywgaXQgdGVsbHMgdXMgdGhhdCBwZW9wbGUgb3duaW5nIGEgVklBLQpiYXNlZCBtYWluYm9hcmQgKGt0WFhYLCBNVlAzKSBoYXZlIG1vcmUgcHJvYmxlbXMgdGhhbiB1c2VycyB3aXRoIGEgbWFpbmJvYXJkCmJhc2VkIG9uIGEgZGlmZmVyZW50IGNoaXBzZXQuIEhlcmUncyBzb21lIG5vdGVzIGZyb20gQW5kcmV3IFN0ZXZlbnM6Ci0tCkhlcmUncyBteSBleHBlcmllbmNlIG9mIHVzaW5nIExNTDMzIGFuZCBCdXogb24gdmFyaW91cyBtb3RoZXJib2FyZHM6CgpWSUEgTVZQMwoJRm9yZ2V0IGl0LiBQb2ludGxlc3MuIERvZXNuJ3Qgd29yay4KSW50ZWwgNDMwRlggKFBlbnRpdW0gMjAwKQoJTE1MMzMgcGVyZmVjdCwgQnV6IHRvbGVyYWJsZSAoMyBvciA0IGZyYW1lcyBkcm9wcGVkIHBlciBtb3ZpZSkKSW50ZWwgNDQwQlggKGVhcmx5IHN0ZXBwaW5nKQoJTE1MMzMgdG9sZXJhYmxlLiBCdXogc3RhcnRpbmcgdG8gZ2V0IGFubm95aW5nICg2LTEwIGZyYW1lcy9ob3VyKQpJbnRlbCA0NDBCWCAobGF0ZSBzdGVwcGluZykKCUJ1eiB0b2xlcmFibGUsIExNTDMgYWxtb3N0IHBlcmZlY3QgKG9jY2FzaW9uYWwgc2luZ2xlIGZyYW1lIGRyb3BzKQpTaVM3MzUKCUxNTDMzIHBlcmZlY3QsIEJ1eiB0b2xlcmFibGUuClZJQSBLVDEzMygqKQoJTE1MMzMgc3RhcnRpbmcgdG8gZ2V0IGFubm95aW5nLCBCdXogcG9vciBlbm91Z2ggdGhhdCBJIGhhdmUgdXAuCgpCb3RoIDQ0MEJYIGJvYXJkcyB3ZXJlIGR1YWwgQ1BVIHZlcnNpb25zLgotLQpCZXJuaGFyZCBQcmFzY2hpbmdlciBsYXRlciBhZGRlZDoKLS0KQU1EIDc1MQoJQnV6IHBlcmZlY3QtdG9sZXJhYmxlCkFNRCA3NjAKCUJ1eiBwZXJmZWN0LXRvbGVyYWJsZQotLQpJbiBnZW5lcmFsLCBwZW9wbGUgb24gdGhlIHVzZXIgbWFpbGluZ2xpc3Qgd29uJ3QgZ2l2ZSB5b3UgbXVjaCBvZiBhIGNoYW5jZQppZiB5b3UgaGF2ZSBhIFZJQS1iYXNlZCBtb3RoZXJib2FyZC4gVGhleSBtYXkgYmUgY2hlYXAsIGJ1dCBzb21ldGltZXMsIHlvdSdkCnJhdGhlciB3YW50IHRvIHNwZW5kIHNvbWUgbW9yZSBtb25leSBvbiBiZXR0ZXIgYm9hcmRzLiBJbiBnZW5lcmFsLCBWSUEKbWFpbmJvYXJkJ3MgSURFL1BDSSBwZXJmb3JtYW5jZSB3aWxsIGFsc28gc3VjayBiYWRseSBjb21wYXJlZCB0byBvdGhlcnMuCllvdSdsbCBub3RpY2VkIHRoZSBEQzEwKy9EQzMwKyBhcmVuJ3QgbWVudGlvbmVkIGFueXdoZXJlIGluIHRoZSBvdmVydmlldy4KQmFzaWNhbGx5LCB5b3UgY2FuIGFzc3VtZSB0aGF0IGlmIHRoZSBCdXogd29ya3MsIHRoZSBMTUwzMyB3aWxsIHdvcmsgdG9vLiBJZgp0aGUgTE1MMzMgd29ya3MsIHRoZSBEQzEwKy9EQzMwKyB3aWxsIHdvcmsgdG9vLiBUaGV5J3JlIG1vc3QgdG9sZXJhbnQgdG8KZGlmZmVyZW50IG1haW5ib2FyZCBjaGlwc2V0cyBmcm9tIGFsbCBvZiB0aGUgc3VwcG9ydGVkIGNhcmRzLgoKSWYgeW91IGV4cGVyaWVuY2UgdGltZW91dHMgZHVyaW5nIGNhcHR1cmUsIGJ1eSBhIGJldHRlciBtYWluYm9hcmQgb3IgbG93ZXIKdGhlIHF1YWxpdHkvYnVmZmVyc2l6ZSBkdXJpbmcgY2FwdHVyZSAoc2VlICdDb25jZXJuaW5nIGJ1ZmZlciBzaXplcywgcXVhbGl0eSwKb3V0cHV0IHNpemUgZXRjLicpLiBJZiBpdCBoYW5ncywgdGhlcmUncyBsaXR0bGUgd2UgY2FuIGRvIGFzIG9mIG5vdy4gQ2hlY2sKeW91ciBJUlFzIGFuZCBtYWtlIHN1cmUgdGhlIGNhcmQgaGFzIGl0cyBvd24gaW50ZXJydXB0cy4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PQoKNC4gUHJvZ3JhbW1pbmcgaW50ZXJmYWNlCgpUaGlzIGRyaXZlciBjb25mb3JtcyB0byB2aWRlbzRsaW51eCBhbmQgdmlkZW80bGludXgyLCBib3RoIGNhbiBiZSB1c2VkIHRvCnVzZSB0aGUgZHJpdmVyLiBTaW5jZSB2aWRlbzRsaW51eCBkaWRuJ3QgcHJvdmlkZSBhZGVxdWF0ZSBjYWxscyB0byBmdWxseQp1c2UgdGhlIGNhcmRzJyBmZWF0dXJlcywgd2UndmUgaW50cm9kdWNlZCBzZXZlcmFsIHByb2dyYW1taW5nIGV4dGVuc2lvbnMsCndoaWNoIGFyZSBjdXJyZW50bHkgb2ZmaWNpYWxseSBhY2NlcHRlZCBpbiB0aGUgMi40LnggYnJhbmNoIG9mIHRoZSBrZXJuZWwuClRoZXNlIGV4dGVuc2lvbnMgYXJlIGtub3duIGFzIHRoZSB2NGwvbWpwZWcgZXh0ZW5zaW9ucy4gU2VlIHpvcmFuLmggZm9yCmRldGFpbHMgKHN0cnVjdHMvaW9jdGxzKS4KCkluZm9ybWF0aW9uIC0gdmlkZW80bGludXg6Cmh0dHA6Ly9yb2FkcnVubmVyLnN3YW5zZWEubGludXgub3JnLnVrL3Y0bGFwaS5zaHRtbApEb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0FQSS5odG1sCi91c3IvaW5jbHVkZS9saW51eC92aWRlb2Rldi5oCgpJbmZvcm1hdGlvbiAtIHZpZGVvNGxpbnV4L21qcGVnIGV4dGVuc2lvbnM6Ci4vem9yYW4uaAooYWxzbyBzZWUgYmVsb3cpCgpJbmZvcm1hdGlvbiAtIHZpZGVvNGxpbnV4MjoKaHR0cDovL2xpbnV4dHYub3JnCmh0dHA6Ly92NGwyc3BlYy5ieXRlc2V4Lm9yZy8KL3Vzci9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2Mi5oCgpNb3JlIGluZm9ybWF0aW9uIG9uIHRoZSB2aWRlbzRsaW51eC9tanBlZyBleHRlbnNpb25zLCBieSBTZXJndWVpCk1pcmlkb25vdmkgYW5kIFJhaW5lciBKb2hhbm5pOgotLQpUaGUgaW9jdGxzIGZvciB0aGF0IGludGVyZmFjZSBhcmUgYXMgZm9sbG93czoKCkJVWklPQ19HX1BBUkFNUwpCVVpJT0NfU19QQVJBTVMKCkdldCBhbmQgc2V0IHRoZSBwYXJhbWV0ZXJzIG9mIHRoZSBidXouIFRoZSB1c2VyIHNob3VsZCBhbHdheXMgZG8gYQpCVVpJT0NfR19QQVJBTVMgKHdpdGggYSBzdHJ1Y3QgYnV6X3BhcmFtcykgdG8gb2J0YWluIHRoZSBkZWZhdWx0CnNldHRpbmdzLCBjaGFuZ2Ugd2hhdCBoZSBsaWtlcyBhbmQgdGhlbiBtYWtlIGEgQlVaSU9DX1NfUEFSQU1TIGNhbGwuCgpCVVpJT0NfUkVRQlVGUwoKQmVmb3JlIGJlaW5nIGFibGUgdG8gY2FwdHVyZS9wbGF5YmFjaywgdGhlIHVzZXIgaGFzIHRvIHJlcXVlc3QKdGhlIGJ1ZmZlcnMgaGUgaXMgd2FudGluZyB0byB1c2UuIEZpbGwgdGhlIHN0cnVjdHVyZQp6b3Jhbl9yZXF1ZXN0YnVmZmVycyB3aXRoIHRoZSBzaXplIChyZWNvbW1lbmRlZDogMjU2KjEwMjQpIGFuZAp0aGUgbnVtYmVyIChyZWNvbW1lbmRlZCAzMiB1cCB0byAyNTYpLiBUaGVyZSBhcmUgbm8gc3VjaCByZXN0cmljdGlvbnMKYXMgZm9yIHRoZSBWaWRlbyBmb3IgTGludXggYnVmZmVycywgeW91IHNob3VsZCBMRUFWRSBTVUZGSUNJRU5UCk1FTU9SWSBmb3IgeW91ciBzeXN0ZW0gaG93ZXZlciwgZWxzZSBzdHJhbmdlIHRoaW5ncyB3aWxsIGhhcHBlbiAuLi4uCk9uIHJldHVybiwgdGhlIHpvcmFuX3JlcXVlc3RidWZmZXJzIHN0cnVjdHVyZSBjb250YWlucyBudW1iZXIgYW5kCnNpemUgb2YgdGhlIGFjdHVhbGx5IGFsbG9jYXRlZCBidWZmZXJzLgpZb3Ugc2hvdWxkIHVzZSB0aGVzZSBudW1iZXJzIGZvciBkb2luZyBhIG1tYXAgb2YgdGhlIGJ1ZmZlcnMKaW50byB0aGUgdXNlciBzcGFjZS4KVGhlIEJVWklPQ19SRVFCVUZTIGlvY3RsIGFsc28gbWFrZXMgaXQgaGFwcGVuLCB0aGF0IHRoZSBuZXh0IG1tYXAKbWFwcyB0aGUgTUpQRUcgYnVmZmVyIGluc3RlYWQgb2YgdGhlIFY0TCBidWZmZXJzLgoKQlVaSU9DX1FCVUZfQ0FQVApCVVpJT0NfUUJVRl9QTEFZCgpRdWV1ZSBhIGJ1ZmZlciBmb3IgY2FwdHVyZSBvciBwbGF5YmFjay4gVGhlIGZpcnN0IGNhbGwgYWxzbyBzdGFydHMKc3RyZWFtaW5nIGNhcHR1cmUuIFdoZW4gc3RyZWFtaW5nIGNhcHR1cmUgaXMgZ29pbmcgb24sIHlvdSBtYXkKb25seSBxdWV1ZSBmdXJ0aGVyIGJ1ZmZlcnMgb3IgaXNzdWUgc3luY3MgdW50aWwgc3RyZWFtaW5nCmNhcHR1cmUgaXMgc3dpdGNoZWQgb2ZmIGFnYWluIHdpdGggYSBhcmd1bWVudCBvZiAtMSB0bwphIEJVWklPQ19RQlVGX0NBUFQvQlVaSU9DX1FCVUZfUExBWSBpb2N0bC4KCkJVWklPQ19TWU5DCgpJc3N1ZSB0aGlzIGlvY3RsIHdoZW4gYWxsIGJ1ZmZlcnMgYXJlIHF1ZXVlZC4gVGhpcyBpb2N0bCB3aWxsCmJsb2NrIHVudGlsIHRoZSBmaXJzdCBidWZmZXIgYmVjb21lcyBmcmVlIGZvciBzYXZpbmcgaXRzCmRhdGEgdG8gZGlzayAoYWZ0ZXIgQlVaSU9DX1FCVUZfQ0FQVCkgb3IgZm9yIHJldXNlIChhZnRlciBCVVpJT0NfUUJVRl9QTEFZKS4KCkJVWklPQ19HX1NUQVRVUwoKR2V0IHRoZSBzdGF0dXMgb2YgdGhlIGlucHV0IGxpbmVzICh2aWRlbyBzb3VyY2UgY29ubmVjdGVkL25vcm0pLgoKRm9yIHByb2dyYW1taW5nIGV4YW1wbGUsIHBsZWFzZSwgbG9vayBhdCBsYXZyZWMuYyBhbmQgbGF2cGxheS5jIGNvZGUgaW4KbGF2dG9vbHMtMS4ycDIgcGFja2FnZSAoVVJMOiBodHRwOi8vd3d3LmNpY2VzZS5teC9+bWlyc2V2L0RDMTBwbHVzLykKYW5kIHRoZSAnZXhhbXBsZXMnIGRpcmVjdG9yeSBpbiB0aGUgb3JpZ2luYWwgQnV6IGRyaXZlciBkaXN0cmlidXRpb24uCgpBZGRpdGlvbmFsIG5vdGVzIGZvciBzb2Z0d2FyZSBkZXZlbG9wZXJzOgoKICAgVGhlIGRyaXZlciByZXR1cm5zIG1heHdpZHRoIGFuZCBtYXhoZWlnaHQgcGFyYW1ldGVycyBhY2NvcmRpbmcgdG8KICAgdGhlIGN1cnJlbnQgVFYgc3RhbmRhcmQgKG5vcm0pLiBUaGVyZWZvcmUsIHRoZSBzb2Z0d2FyZSB3aGljaAogICBjb21tdW5pY2F0ZXMgd2l0aCB0aGUgZHJpdmVyIGFuZCAiYXNrcyIgZm9yIHRoZXNlIHBhcmFtZXRlcnMgc2hvdWxkCiAgIGZpcnN0IHNldCB0aGUgY29ycmVjdCBub3JtLiBXZWxsLCBpdCBzZWVtcyBsb2dpY2FsbHkgY29ycmVjdDogVFYKICAgc3RhbmRhcmQgaXMgIm1vcmUgY29uc3RhbnQiIGZvciBjdXJyZW50IGNvdW50cnkgdGhhbiBnZW9tZXRyeQogICBzZXR0aW5ncyBvZiBhIHZhcmlldHkgb2YgVFYgY2FwdHVyZSBjYXJkcyB3aGljaCBtYXkgd29yayBpbiBJVFUgb3IKICAgc3F1YXJlIHBpeGVsIGZvcm1hdC4gUmVtZW1iZXIgdGhhdCB1c2VycyBub3cgY2FuIGxvY2sgdGhlIG5vcm0gdG8KICAgYXZvaWQgYW55IGFtYmlndWl0eS4KLS0KUGxlYXNlIG5vdGUgdGhhdCBsYXZwbGF5L2xhdnJlYyBhcmUgYWxzbyBpbmNsdWRlZCBpbiB0aGUgTUpQRUctdG9vbHMKKGh0dHA6Ly9tanBlZy5zZi5uZXQvKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PQoKNS4gQXBwbGljYXRpb25zCgpBcHBsaWNhdGlvbnMga25vd24gdG8gd29yayB3aXRoIHRoaXMgZHJpdmVyOgoKVFYgdmlld2luZzoKKiB4YXd0dgoqIGt3aW50dgoqIHByb2JhYmx5IGFueSBUViBhcHBsaWNhdGlvbiB0aGF0IHN1cHBvcnRzIHZpZGVvNGxpbnV4IG9yIHZpZGVvNGxpbnV4Mi4KCk1KUEVHIGNhcHR1cmUvcGxheWJhY2s6CiogbWpwZWd0b29scy9sYXZ0b29scyAob3IgTGludXggVmlkZW8gU3R1ZGlvKQoqIGdzdHJlYW1lcgoqIG1wbGF5ZXIKCkdlbmVyYWwgcmF3IGNhcHR1cmU6CiogeGF3dHYKKiBnc3RyZWFtZXIKKiBwcm9iYWJseSBhbnkgYXBwbGljYXRpb24gdGhhdCBzdXBwb3J0cyB2aWRlbzRsaW51eCBvciB2aWRlbzRsaW51eDIKClZpZGVvIGVkaXRpbmc6CiogQ2luZWxlcnJhCiogTWFpbkFjdG9yCiogbWpwZWd0b29scyAob3IgTGludXggVmlkZW8gU3R1ZGlvKQoKPT09PT09PT09PT09PT09PT09PT09PT09PT09Cgo2LiBDb25jZXJuaW5nIGJ1ZmZlciBzaXplcywgcXVhbGl0eSwgb3V0cHV0IHNpemUgZXRjLgoKVGhlIHpyMzYwNjAgY2FuIGRvIDE6MiBKUEVHIGNvbXByZXNzaW9uLiBUaGlzIGlzIHJlYWxseSB0aGUgdGhlb3JldGljYWwKbWF4aW11bSB0aGF0IHRoZSBjaGlwc2V0IGNhbiByZWFjaC4gVGhlIGRyaXZlciBjYW4sIGhvd2V2ZXIsIGxpbWl0IGNvbXByZXNzaW9uCnRvIGEgbWF4aW11bSAoc2l6ZSkgb2YgMTo0LiBUaGUgcmVhc29uIGZvciB0aGlzIGlzIHRoYXQgc29tZSBjYXJkcyAoZS5nLiBCdXopCmNhbid0IGhhbmRsZSAxOjIgY29tcHJlc3Npb24gd2l0aG91dCBzdG9wcGluZyBjYXB0dXJlIGFmdGVyIG9ubHkgYSBmZXcgbWludXRlcy4KV2l0aCAxOjQsIGl0J2xsIG1vc3RseSB3b3JrLiBJZiB5b3UgaGF2ZSBhIEJ1eiwgdXNlICdsb3dfYml0cmF0ZT0xJyB0byBnbyBpbnRvCjE6NCBtYXguIGNvbXByZXNzaW9uIG1vZGUuCgoxMDAlIEpQRUcgcXVhbGl0eSBpcyB0aHVzIDE6MiBjb21wcmVzc2lvbiBpbiBwcmFjdGljZS4gU28gZm9yIGEgZnVsbCBQQUwgZnJhbWUKKHNpemUgNzIweDU3NikuIFRoZSBKUEVHIGZpZWxkcyBhcmUgc3RvcmVkIGluIFlVWTIgZm9ybWF0LCBzbyB0aGUgc2l6ZSBvZiB0aGUKZmllbGRzIGFyZSA3MjB4Mjg4eDE2LzIgYml0cy9maWVsZCAoMiBmaWVsZHMvZnJhbWUpID0gMjA3MzYwIGJ5dGVzL2ZpZWxkIHggMiA9CjQxNDcyMCBieXRlcy9mcmFtZSAoYWRkIHNvbWUgbW9yZSBieXRlcyBmb3IgaGVhZGVycyBhbmQgREhUIChodWZmbWFuKS9EUVQKKHF1YW50aXphdGlvbikgdGFibGVzLCBhbmQgeW91J2xsIGdldCB0byBzb21ldGhpbmcgbGlrZSA1MTJrQiBwZXIgZnJhbWUgZm9yCjE6MiBjb21wcmVzc2lvbi4gRm9yIDE6NCBjb21wcmVzc2lvbiwgeW91J2QgaGF2ZSBmcmFtZXMgb2YgaGFsZiB0aGlzIHNpemUuCgpTb21lIGFkZGl0aW9uYWwgZXhwbGFuYXRpb24gYnkgTWFydGluIFNhbXVlbHNzb24sIHdoaWNoIGFsc28gZXhwbGFpbnMgdGhlCmltcG9ydGFuY2Ugb2YgYnVmZmVyIHNpemVzOgotLQo+IEhtbSwgSSBkbyBub3QgdGhpbmsgaXQgaXMgcmVhbGx5IHRoYXQgd2F5LiBXaXRoIHRoZSBjdXJyZW50IChkb3dubG9hZGVkCj4gYXQgMTg6MDAgTW9uZGF5KSBkcml2ZXIgSSBnZXQgdGhhdCBvdXRwdXQgc2l6ZXMgZm9yIDEwIHNlYzoKPiAtcSA1MCAtYiAxMjggOiAyNC4yODMuMzMyIEJ5dGVzCj4gLXEgNTAgLWIgMjU2IDogNDguNDQyLjM2OAo+IC1xIDI1IC1iIDEyOCA6IDI0LjY1NS45OTIKPiAtcSAyNSAtYiAyNTYgOiAyNS44NTkuODIwCgpJIHdva2UgdXAsIGFuZCBjYW4ndCBnbyB0byBzbGVlcCBhZ2Fpbi4gSSdsbCBraWxsIHNvbWUgdGltZSBleHBsYWluaW5nIHdoeQp0aGlzIGRvZXNuJ3QgbG9vayBzdHJhbmdlIHRvIG1lLgoKTGV0J3MgZG8gc29tZSBtYXRoIHVzaW5nIGEgd2lkdGggb2YgNzA0IHBpeGVscy4gSSdtIG5vdCBzdXJlIHdoZXRoZXIgdGhlIEJ1egphY3R1YWxseSB1c2UgdGhhdCBudW1iZXIgb3Igbm90LCBidXQgdGhhdCdzIG5vdCB0b28gaW1wb3J0YW50IHJpZ2h0IG5vdy4KCjcwNHgyODggcGl4ZWxzLCBvbmUgZmllbGQsIGlzIDIwMjc1MiBwaXhlbHMuIERpdmlkZWQgYnkgNjQgcGl4ZWxzIHBlciBibG9jazsKMzE2OCBibG9ja3MgcGVyIGZpZWxkLiBFYWNoIHBpeGVsIGNvbnNpc3Qgb2YgdHdvIGJ5dGVzOyAxMjggYnl0ZXMgcGVyIGJsb2NrOwoxMDI0IGJpdHMgcGVyIGJsb2NrLiAxMDAlIGluIHRoZSBuZXcgZHJpdmVyIG1lYW4gMToyIGNvbXByZXNzaW9uOyB0aGUgbWF4aW11bQpvdXRwdXQgYmVjb21lcyA1MTIgYml0cyBwZXIgYmxvY2suIEFjdHVhbGx5IDUxMCwgYnV0IDUxMiBpcyBzaW1wbGVyIHRvIHVzZQpmb3IgY2FsY3VsYXRpb25zLgoKTGV0J3Mgc2F5IHRoYXQgd2Ugc3BlY2lmeSBkMXE1MC4gV2UgdGh1cyB3YW50IDI1NiBiaXRzIHBlciBibG9jazsgdGltZXMgMzE2OApiZWNvbWVzIDgxMTAwOCBiaXRzOyAxMDEzNzYgYnl0ZXMgcGVyIGZpZWxkLiBXZSdyZSB0YWxraW5nIHJhdyBiaXRzIGFuZCBieXRlcwpoZXJlLCBzbyB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueSBmYW5jeSBjb3JyZWN0aW9ucyBmb3IgYml0cy1wZXItcGl4ZWwgb3Igc3VjaAp0aGluZ3MuIDEwMTM3NiBieXRlcyBwZXIgZmllbGQuCgpkMSB2aWRlbyBjb250YWlucyB0d28gZmllbGRzIHBlciBmcmFtZS4gVGhvc2Ugc3VtIHVwIHRvIDIwMjc1MiBieXRlcyBwZXIKZnJhbWUsIGFuZCBvbmUgb2YgdGhvc2UgZnJhbWVzIGdvZXMgaW50byBlYWNoIGJ1ZmZlci4KCkJ1dCB3YWl0IGEgc2Vjb25kISAtYjEyOCBnaXZlcyAxMjhrQiBidWZmZXJzISBJdCdzIG5vdCBwb3NzaWJsZSB0byBjcmFtCjIwMjc1MiBieXRlcyBvZiBKUEVHIGRhdGEgaW50byAxMjhrQiEKClRoaXMgaXMgd2hhdCB0aGUgZHJpdmVyIG5vdGljZSBhbmQgYXV0b21hdGljYWxseSBjb21wZW5zYXRlIGZvciBpbiB5b3VyCmV4YW1wbGVzLiBMZXQncyBkbyBzb21lIG1hdGggdXNpbmcgdGhpcyBpbmZvcm1hdGlvbjoKCjEyOGtCIGlzIDEzMTA3MiBieXRlcy4gSW4gdGhpcyBidWZmZXIsIHdlIHdhbnQgdG8gc3RvcmUgdHdvIGZpZWxkcywgd2hpY2gKbGVhdmVzIDY1NTM2IGJ5dGVzIGZvciBlYWNoIGZpZWxkLiBVc2luZyAzMTY4IGJsb2NrcyBwZXIgZmllbGQsIHdlIGdldAoyMC42ODY4Njg2OC4uLiBhdmFpbGFibGUgYnl0ZXMgcGVyIGJsb2NrOyAxNjUgYml0cy4gV2UgY2FuJ3QgYWxsb3cgdGhlCnJlcXVlc3QgZm9yIDI1NiBiaXRzIHBlciBibG9jayB3aGVuIHRoZXJlJ3Mgb25seSAxNjUgYml0cyBhdmFpbGFibGUhIFRoZSAtcTUwCm9wdGlvbiBpcyBzaWxlbnRseSBvdmVycmlkZGVuLCBhbmQgdGhlIC1iMTI4IG9wdGlvbiB0YWtlcyBwcmVjZWRlbmNlLCBsZWF2aW5nCnVzIHdpdGggdGhlIGVxdWl2YWxlbmNlIG9mIC1xMzIuCgpUaGlzIGdpdmVzIHVzIGEgZGF0YSByYXRlIG9mIDE2NSBiaXRzIHBlciBibG9jaywgd2hpY2gsIHRpbWVzIDMxNjgsIHN1bXMgdXAKdG8gNjUzNDAgYnl0ZXMgcGVyIGZpZWxkLCBvdXQgb2YgdGhlIGFsbG93ZWQgNjU1MzYuIFRoZSBjdXJyZW50IGRyaXZlciBoYXMKYW5vdGhlciBsZXZlbCBvZiByYXRlIGxpbWl0aW5nOyBpdCB3b24ndCBhY2NlcHQgLXEgdmFsdWVzIHRoYXQgZmlsbCBtb3JlIHRoYW4KNi84IG9mIHRoZSBzcGVjaWZpZWQgYnVmZmVycy4gKEknbSBub3Qgc3VyZSB3aHkuICJQbGF5aW5nIGl0IHNhZmUiIHNlZW0gdG8gYmUKYSBzYWZlIGJldC4gUGVyc29uYWxseSwgSSB0aGluayBJIHdvdWxkIGhhdmUgbG93ZXJlZCByZXF1ZXN0ZWQtYml0cy1wZXItYmxvY2sKYnkgb25lLCBvciBzb21ldGhpbmcgbGlrZSB0aGF0LikgV2UgY2FuJ3QgdXNlIDE2NSBiaXRzIHBlciBibG9jaywgYnV0IGhhdmUgdG8KbG93ZXIgaXQgYWdhaW4sIHRvIDYvOCBvZiB0aGUgYXZhaWxhYmxlIGJ1ZmZlciBzcGFjZTogV2UgZW5kIHVwIHdpdGggMTI0IGJpdHMKcGVyIGJsb2NrLCB0aGUgZXF1aXZhbGVuY2Ugb2YgLXEyNC4gV2l0aCAxMjhrQiBidWZmZXJzLCB5b3UgY2FuJ3QgdXNlIGdyZWF0ZXIKdGhhbiAtcTI0IGF0IC1kMS4gKEFuZCBQQUwsIGFuZCA3MDQgcGl4ZWxzIHdpZHRoLi4uKQoKVGhlIHRoaXJkIGV4YW1wbGUgaXMgbGltaXRlZCB0byAtcTI0IHRocm91Z2ggdGhlIHNhbWUgcHJvY2Vzcy4gVGhlIHNlY29uZApleGFtcGxlLCB1c2luZyB2ZXJ5IHNpbWlsYXIgY2FsY3VsYXRpb25zLCBpcyBsaW1pdGVkIHRvIC1xNDguIFRoZSBvbmx5CmV4YW1wbGUgdGhhdCBhY3R1YWxseSBncmFiIGF0IHRoZSBzcGVjaWZpZWQgLXEgdmFsdWUgaXMgdGhlIGxhc3Qgb25lLCB3aGljaAppcyBjbGVhcmx5IHZpc2libGUsIGxvb2tpbmcgYXQgdGhlIGZpbGUgc2l6ZS4KLS0KCkNvbmNsdXNpb246IHRoZSBxdWFsaXR5IG9mIHRoZSByZXN1bHRpbmcgbW92aWUgZGVwZW5kcyBvbiBidWZmZXIgc2l6ZSwgcXVhbGl0eSwKd2hldGhlciBvciBub3QgeW91IHVzZSAnbG93X2JpdHJhdGU9MScgYXMgaW5zbW9kIG9wdGlvbiBmb3IgdGhlIHpyMzYwNjAuYwptb2R1bGUgdG8gZG8gMTo0IGluc3RlYWQgb2YgMToyIGNvbXByZXNzaW9uLCBldGMuCgpJZiB5b3UgZXhwZXJpZW5jZSB0aW1lb3V0cywgbG93ZXJpbmcgdGhlIHF1YWxpdHkvYnVmZmVyc2l6ZSBvciB1c2luZwonbG93X2JpdHJhdGU9MSBhcyBpbnNtb2Qgb3B0aW9uIGZvciB6cjM2MDYwLm8gbWlnaHQgYWN0dWFsbHkgaGVscCwgYXMgaXMKcHJvdmVuIGJ5IHRoZSBCdXouCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT0KCjcuIEl0IGhhbmdzL2NyYXNoZXMvZmFpbHMvd2hhdGV2ZXJzISBIZWxwIQoKTWFrZSBzdXJlIHRoYXQgdGhlIGNhcmQgaGFzIGl0cyBvd24gaW50ZXJydXB0cyAoc2VlIC9wcm9jL2ludGVycnVwdHMpLCBjaGVjawp0aGUgb3V0cHV0IG9mIGRtZXNnIGF0IGhpZ2ggdmVyYm9zaXR5IChsb2FkIHpyMzYwNjcubyB3aXRoIGRlYnVnPTIsCmxvYWQgYWxsIG90aGVyIG1vZHVsZXMgd2l0aCBkZWJ1Zz0xKS4gQ2hlY2sgdGhhdCB5b3VyIG1haW5ib2FyZCBpcyBmYXZvcmFibGUKKHNlZSBxdWVzdGlvbiAyKSBhbmQgaWYgbm90LCB0ZXN0IHRoZSBjYXJkIGluIGFub3RoZXIgY29tcHV0ZXIuIEFsc28gc2VlIHRoZQpub3RlcyBnaXZlbiBpbiBxdWVzdGlvbiAzIGFuZCB0cnkgbG93ZXJpbmcgcXVhbGl0eS9idWZmZXJzaXplL2NhcHR1cmVzaXplCmlmIHJlY29yZGluZyBmYWlscyBhZnRlciBhIHBlcmlvZCBvZiB0aW1lLgoKSWYgYWxsIHRoaXMgZG9lc24ndCBoZWxwLCBnaXZlIGEgY2xlYXIgZGVzY3JpcHRpb24gb2YgdGhlIHByb2JsZW0gaW5jbHVkaW5nCmRldGFpbGVkIGhhcmR3YXJlIGluZm9ybWF0aW9uIChtZW1vcnkrYnJhbmQsIG1haW5ib2FyZCtjaGlwc2V0K2JyYW5kLCB3aGljaApNSlBFRyBjYXJkLCBwcm9jZXNzb3IsIG90aGVyIFBDSSBjYXJkcyB0aGF0IG1pZ2h0IGJlIG9mIGludGVyZXN0KSwgZ2l2ZSB0aGUKc3lzdGVtIFBuUCBpbmZvcm1hdGlvbiAoL3Byb2MvaW50ZXJydXB0cywgL3Byb2MvZG1hLCAvcHJvYy9kZXZpY2VzKSwgYW5kIGdpdmUKdGhlIGtlcm5lbCB2ZXJzaW9uLCBkcml2ZXIgdmVyc2lvbiwgZ2xpYmMgdmVyc2lvbiwgZ2NjIHZlcnNpb24gYW5kIGFueSBvdGhlcgppbmZvcm1hdGlvbiB0aGF0IG1pZ2h0IHBvc3NpYmx5IGJlIG9mIGludGVyZXN0LiBBbHNvIHByb3ZpZGUgdGhlIGRtZXNnIG91dHB1dAphdCBoaWdoIHZlcmJvc2l0eS4gU2VlICdDb250YWN0aW5nJyBvbiBob3cgdG8gY29udGFjdCB0aGUgZGV2ZWxvcGVycy4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PQoKOC4gTWFpbnRhaW5lcnMvQ29udGFjdGluZwoKVGhlIGRyaXZlciBpcyBjdXJyZW50bHkgbWFpbnRhaW5lZCBieSBMYXVyZW50IFBpbmNoYXJ0IGFuZCBSb25hbGQgQnVsdGplCig8bGF1cmVudC5waW5jaGFydEBza3luZXQuYmU+IGFuZCA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PikuIEZvciBidWcKcmVwb3J0cyBvciBxdWVzdGlvbnMsIHBsZWFzZSBjb250YWN0IHRoZSBtYWlsaW5nbGlzdCBpbnN0ZWFkIG9mIHRoZSBkZXZlbG9wZXJzCmluZGl2aWR1YWxseS4gRm9yIHVzZXIgcXVlc3Rpb25zIChpLmUuIGJ1ZyByZXBvcnRzIG9yIGhvdy10byBxdWVzdGlvbnMpLCBzZW5kCmFuIGVtYWlsIHRvIDxtanBlZy11c2Vyc0BsaXN0cy5zZi5uZXQ+LCBmb3IgZGV2ZWxvcGVycyAoaS5lLiBpZiB5b3Ugd2FudCB0bwpoZWxwIHByb2dyYW1taW5nKSwgc2VuZCBhbiBlbWFpbCB0byA8bWpwZWctZGV2ZWxvcGVyQGxpc3RzLnNmLm5ldD4uIFNlZQpodHRwOi8vd3d3LnNmLm5ldC9wcm9qZWN0cy9tanBlZy8gZm9yIHN1YnNjcmlwdGlvbiBpbmZvcm1hdGlvbi4KCkZvciBidWcgcmVwb3J0cywgYmUgc3VyZSB0byBpbmNsdWRlIGFsbCB0aGUgaW5mb3JtYXRpb24gYXMgZGVzY3JpYmVkIGluCnRoZSBzZWN0aW9uICdJdCBoYW5ncy9jcmFzaGVzL2ZhaWxzL3doYXRldmVycyEgSGVscCEnLiBQbGVhc2UgbWFrZSBzdXJlCnlvdSdyZSB1c2luZyB0aGUgbGF0ZXN0IHZlcnNpb24gKGh0dHA6Ly9tanBlZy5zZi5uZXQvZHJpdmVyLXpvcmFuLykuCgpQcmV2aW91cyBtYWludGFpbmVycy9kZXZlbG9wZXJzIG9mIHRoaXMgZHJpdmVyIGluY2x1ZGUgU2VyZ3VlaSBNaXJpZG9ub3YKPG1pcnNldkBjaWNlc2UubXg+LCBXb2xmZ2FuZyBTY2hlcnIgPHNjaGVyckBuZXQ0eW91Lm5ldD4sIERhdmUgUGVya3MKPGRwZXJrc0BpYm0ubmV0PiBhbmQgUmFpbmVyIEpvaGFubmkgPFJhaW5lckBKb2hhbm5pLmRlPi4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PQoKOS4gTGljZW5zZQoKVGhpcyBkcml2ZXIgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgoKICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCgogICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KCiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgoKU2VlIGh0dHA6Ly93d3cuZ251Lm9yZy8gZm9yIG1vcmUgaW5mb3JtYXRpb24uCg==