VFJBTlNMQVRJTkcgVklNIE1FU1NBR0VTCgpJbiB0aGlzIGRpcmVjdG9yeSB5b3Ugd2lsbCBmaW5kIHh4LnBvIGZpbGVzLCB3aGVyZSAieHgiIGlzIGEgbGFuZ3VhZ2UgY29kZS4KRWFjaCBmaWxlIGNvbnRhaW5zIHRoZSB0cmFuc2xhdGlvbiBvZiBFbmdsaXNoIFZpbSBtZXNzYWdlcyBmb3Igb25lIGxhbmd1YWdlLgpUaGUgZmlsZXMgYXJlIGluICJwbyIgZm9ybWF0LCB1c2VkIGJ5IHRoZSBnZXR0ZXh0IHBhY2thZ2UuICBQbGVhc2UgcmVmZXIgdG8KdGhlIGdldHRleHQgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KClRoZSBHTlUgZ2V0dGV4dCBsaWJyYXJ5LCBzdGFydGluZyB3aXRoIHZlcnNpb24gMC4xMC4zNywgc3VwcG9ydHMgY29udmVydGluZwptZXNzYWdlcyBmcm9tIG9uZSBlbmNvZGluZyB0byBhbm90aGVyLiAgVGhpcyByZXF1aXJlcyB0aGF0IGl0IHdhcyBjb21waWxlZAp3aXRoIEhBVkVfSUNPTlYuICBUaGUgcmVzdWx0IGlzIHRoYXQgdGhlIG1lc3NhZ2VzIG1heSBiZSBpbiBhbnkgZW5jb2RpbmcKc3VwcG9ydGVkIGJ5IGljb252IGFuZCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgY29udmVydGVkIHRvIHRoZSBjdXJyZW50bHkgdXNlZAplbmNvZGluZy4KClRoZSBHTlUgZ2V0dGV4dCBsaWJyYXJ5LCBzdGFydGluZyB3aXRoIHZlcnNpb24gMC4xMC4zNiwgdXNlcyBhIG5ldyBmb3JtYXQgZm9yCnNvbWUgZW5jb2RpbmdzLiAgVGhpcyBmb2xvd3MgdGhlIEM5OSBzdGFuZGFyZCBmb3Igc3RyaW5ncy4gIEl0IG1lYW5zIHRoYXQgd2hlbgphIG11bHRpLWJ5dGUgY2hhcmFjdGVyIGluY2x1ZGVzIHRoZSAweDVjIGJ5dGUsIHRoaXMgaXMgbm90IHJlY29nbml6ZWQgYXMgYQpiYWNrc2xhc2guICBTaW5jZSB0aGlzIGZvcm1hdCBpcyBpbmNvbXBhdGlibGUgd2l0aCBTb2xhcmlzLCBWaW0gdXNlcyB0aGUgb2xkCmZvcm1hdC4gIFRoaXMgaXMgZG9uZSBieSBzZXR0aW5nIHRoZSBPTERfUE9fRklMRV9PVVRQVVQgYW5kIE9MRF9QT19GSUxFX0lOUFVUCmVudmlyb25tZW50IHZhcmlhYmxlcy4gIFdoZW4geW91IHVzZSB0aGUgTWFrZWZpbGUgaW4gdGhpcyBkaXJlY3RvcnkgdGhhdCB3aWxsCmJlIGRvbmUgZm9yIHlvdS4gIFRoaXMgZG9lcyBOT1Qgd29yayB3aXRoIGdldHRleHQgMC4xMC4zNi4gIERvbid0IHVzZSBpdCwgZ2V0CjAuMTAuMzcuCgoKT04gTVMtV0lORE9XUwoKVGhlIGRpc3RyaWJ1dGVkIGZpbGVzIGFyZSBnZW5lcmF0ZWQgb24gVW5peCwgYnV0IHRoaXMgc2hvdWxkIGFsc28gYmUgcG9zc2libGUKb24gTVMtV2luZG93cy4gIERvd25sb2FkIHRoZSBnZXR0ZXh0IHBhY2thZ2VzLCBmb3IgZXhhbXBsZSBmcm9tOgoKCWh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZ2V0dGV4dAoKWW91IG1pZ2h0IGhhdmUgdG8gZG8gdGhlIGNvbW1hbmRzIG1hbnVhbGx5LiAgRXhhbXBsZToKCiAgIGNkIGM6XHZpbVx2aW02MAogICBta2RpciBydW50aW1lXGxhbmdcamFcTENfTUVTU0FHRVMKICAgbXNnZm10IC1vIHJ1bnRpbWVcbGFuZ1xqYVxMQ19NRVNTQUdFU1x2aW0ubW8gc3JjXHBvXGphLnBvCgoKV0hFTiBUSEVSRSBJUyBBIE1JU1RBS0UKCklmIHlvdSBmaW5kIHRoZXJlIGlzIGEgbWlzdGFrZSBpbiBvbmUgb2YgdGhlIHRyYW5zbGF0aW9ucywgcGxlYXNlIHJlcG9ydCB0aGlzCnRvIHRoZSBtYWludGFpbmVyIG9mIHRoZSB0cmFuc2xhdGlvbi4gIEhpcy9oZXIgRS1tYWlsIGFkZHJlc3MgaXMgaW4gdGhlCmNvbW1lbnRzIGF0IHRoZSBzdGFydCBvZiB0aGUgZmlsZS4gIFlvdSBjYW4gYWxzbyBzZWUgdGhpcyB3aXRoIHRoZSAiOm1lc3NhZ2VzIgpjb21tYW5kIGluIFZpbSB3aGVuIHRoZSB0cmFuc2xhdGlvbiBpcyBiZWluZyB1c2VkLgoKCkNSRUFUSU5HIEEgTkVXIFBPIEZJTEUKCldlIHdpbGwgdXNlICJ4eC5wbyIgYXMgYW4gZXhhbXBsZSBoZXJlLCByZXBsYWNlICJ4eCIgd2l0aCB0aGUgbmFtZSBvZiB5b3VyCmxhbmd1YWdlLgoKLSBFZGl0IE1ha2VmaWxlIHRvIGFkZCB4eCB0byBMQU5HVUFHRVMgYW5kIHh4Lm1vIHRvIE1PRklMRVMuCi0gQ29weSB0aGUgaGVhZGVyIG9mIGFuIGV4aXN0aW5nIGZpbGUsIGUuZy4sIGRlLnBvLCB0byB4eC5wby4gIERvIG5vdCBjb3B5IGFueQogIG9mIHRoZSB0cmFuc2xhdGVkIG1lc3NhZ2VzLCBkZWxldGUgZXZlcnl0aGluZyBhZnRlciB0aGUgIm1zZ3N0ciIuCi0gVGhlIHJlbWFpbmluZyB3b3JrIGlzIGxpa2UgdXBkYXRpbmcsIHNlZSB0aGUgbmV4dCBzZWN0aW9uLgoKClVQREFUSU5HIEEgUE8gRklMRQoKSWYgeW91IGFyZSB0aGUgbWFpbnRhaW5lciBvZiBhIC5wbyBmaWxlLCB0aGlzIGlzIGhvdyB5b3UgdXBkYXRlIHRoZSBmaWxlLiAgV2UKd2lsbCB1c2UgInh4LnBvIiBhcyBhbiBleGFtcGxlIGhlcmUsIHJlcGxhY2UgInh4IiB3aXRoIHRoZSBuYW1lIG9mIHlvdXIKbGFuZ3VhZ2UuCgooMSkgQWRkIG5ldyBhbmQgY2hhbmdlZCBtZXNzYWdlcyBmcm9tIHRoZSBWaW0gc291cmNlczoKCgltYWtlIHh4CgogICAgVGhpcyB3aWxsIGV4dHJhY3QgYWxsIHRoZSBzdHJpbmdzIGZyb20gVmltIGFuZCBtZXJnZSB0aGVtIGluIHdpdGggdGhlCiAgICBleGlzdGluZyB0cmFuc2xhdGlvbnMuICBSZXF1aXJlcyB0aGUgR05VIGdldHRleHQgdXRpbGl0aWVzLiAgQWxzbyByZXF1aXJlcwogICAgdW5wYWNraW5nIHRoZSBleHRyYSBhcmNoaXZlLgogICAgWW91ciBvcmlnaW5hbCB4eC5wbyBmaWxlIHdpbGwgYmUgY29waWVkIHRvIHh4LnBvLm9yaWcKCiAgICAtLSBBZnRlciB5b3UgZG8gdGhpcywgeW91IE1VU1QgZG8gdGhlIG5leHQgdGhyZWUgc3RlcHMhIC0tCgooMikgVHJhbnNsYXRlCiAgICBTZWUgdGhlIGdldHRleHQgZG9jdW1lbnRhdGlvbiBvbiBob3cgdG8gZG8gdGhpcy4gIFlvdSBjYW4gYWxzbyBmaW5kCiAgICBleGFtcGxlcyBpbiB0aGUgb3RoZXIgcG8gZmlsZXMuCiAgICBTZWFyY2ggdGhlIHBvIGZpbGUgZm9yIGl0ZW1zIHRoYXQgcmVxdWlyZSB0cmFuc2xhdGlvbjoKCgkvZnV6enlcfF5tc2dzdHIgIiJcKFxuIlwpXEAhCgogICAgUmVtb3ZlIHRoZSAiIywgZnV6enkiIGxpbmUgYWZ0ZXIgYWRkaW5nIHRoZSB0cmFuc2xhdGlvbi4KCiAgICBUaGVyZSBpcyBvbmUgc3BlY2lhbCBtZXNzYWdlOgoJbXNnaWQgIk1lc3NhZ2VzIG1haW50YWluZXI6IEJyYW0gTW9vbGVuYWFyIDxCcmFtQHZpbS5vcmc+IgogICAgWW91IHNob3VsZCBpbmNsdWRlIHlvdXIgbmFtZSBhbmQgRS1tYWlsIGFkZHJlc3MgaW5zdGVhZCwgZm9yIGV4YW1wbGU6Cgltc2dzdHIgIkJlcmljaHRlbiD8YmVyc2V0enQgYmVpOiBKb2huIERvZSA8am9obkBkb2Uub3JnPiIKCigzKSBDbGVhbiB1cAogICAgVGhpcyBpcyB2ZXJ5IGltcG9ydGFudCB0byBtYWtlIHN1cmUgdGhlIHRyYW5zbGF0aW9uIHdvcmtzIG9uIGFsbCBzeXN0ZW1zLgogICAgQ29tbWVudC1vdXQgYWxsIG5vbi10cmFuc2xhdGVkIHN0cmluZ3MuICBUaGVyZSBhcmUgdHdvIHR5cGVzOgogICAgLSBpdGVtcyBtYXJrZWQgd2l0aCAiIywgZnV6enkiCiAgICAtIGl0ZW1zIHdpdGggYW4gZW1wdHkgbXNnc3RyCiAgICBZb3UgY2FuIGRvIHRoaXMgd2l0aCB0aGUgY2xlYW51cC52aW0gc2NyaXB0OgoKCTpzb3VyY2UgY2xlYW51cC52aW0KCiAgICBCYWNrZ3JvdW5kOiBvbiBTb2xhcmlzIGFuIGVtcHR5IG1zZ3N0ciByZXN1bHRzIGluIGFuIGVtcHR5IG1lc3NhZ2U7IEdOVQogICAgZ2V0dGV4dCBpZ25vcmVzIGVtcHR5IHN0cmluZ3MgYW5kIGl0ZW1zIG1hcmtlZCB3aXRoICIjLCBmdXp6eSIuCgooNCkgQ2hlY2s6CgoJbWFrZSB4eC5tbwoKICAgIExvb2sgb3V0IGZvciBzeW50YXggZXJyb3JzIGFuZCBmaXggdGhlbS4K