ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZWxvZwoKCkRhbmllbCAoMjQgQXVndXN0IDIwMDUpCi0gVG9ieSBQZXRlcnNvbiBhZGRlZCBDVVJMT1BUX0lHTk9SRV9DT05URU5UX0xFTkdUSCB0byB0aGUgbGlicmFyeSwgYWNjZXNzaWJsZQogIGZyb20gdGhlIGNvbW1hbmQgbGluZSB0b29sIHdpdGggLS1pZ25vcmUtY29udGVudC1sZW5ndGguIFRoaXMgd2lsbCBtYWtlIGl0CiAgZWFzaWVyIHRvIGRvd25sb2FkIGZpbGVzIGZyb20gQXBhY2hlIDEueCAoYW5kIHNpbWlsYXIpIHNlcnZlcnMgdGhhdCBhcmUKICBzdGlsbCBoYXZpbmcgcHJvYmxlbXMgc2VydmluZyBmaWxlcyBsYXJnZXIgdGhhbiAyIG9yIDQgR0IuIFdoZW4gdGhpcyBvcHRpb24KICBpcyBlbmFibGVkLCBjdXJsIHdpbGwgc2ltcGx5IGhhdmUgdG8gd2FpdCBmb3IgdGhlIHNlcnZlciB0byBjbG9zZSB0aGUKICBjb25uZWN0aW9uIHRvIHNpZ25hbCBlbmQgb2YgdHJhbnNmZXIuIEkgd3JvdGUgdGVzdCBjYXNlIDI2OSB0aGF0IHJ1bnMgYQogIHNpbXBsZSB0ZXN0IHRoYXQgdGhpcyB3b3Jrcy4KCi0gKFRyeWluZyBoYXJkIHRvIGV4Y2x1ZGUgZW1vdGlvbnMgbm93LikgdmFsZ3JpbmQgdmVyc2lvbiAzIHN1ZGRlbmx5IHJlbmFtZWQKICB0aGUgLS1sb2dmaWxlIGNvbW1hbmQgbGluZSBvcHRpb24gdG8gLS1sb2ctZmlsZSwgYW5kIHRodXMgdGhlIHRlc3Qgc2NyaXB0CiAgdmFsZ3JpbmQgYXV0b2RldGVjdGlvbiBub3cgaGFzIHlldCBhbm90aGVyIHZlcnNpb24gY2hlY2sgdG8gZG8gYW5kIHRoZW4gaXQKICBhbHRlcnMgdGhlIHZhbGdyaW5kIGNvbW1hbmQgbGluZSBhY2NvcmRpbmdseS4KCi0gRml4ZWQgQ0EgY2VydCB2ZXJpZmljYXRpb24gdXNpbmcgR251VExTIHdpdGggdGhlIGRlZmF1bHQgYnVuZGxlLCB3aGljaAogIHByZXZpb3VzbHkgZmFpbGVkIGR1ZSB0byBHbnVUTFMgbm90IGFsbG93aW5nIHg1MDkgdjEgQ0EgY2VydHMgYnkgZGVmYXVsdC4gICAgIAoKRGFuaWVsICgxOSBBdWd1c3QgMjAwNSkKLSBOb3JiZXJ0IE5vdm90bnkgaGFkIHByb2JsZW1zIHdpdGggRlRQUyBhbmQgaGUgaGVscGVkIG1lIHdvcmsgb3V0IGEgcGF0Y2gKICB0aGF0IG1hZGUgY3VybCBydW4gZmluZSBpbiBoaXMgZW5kLiBUaGUga2V5IHdhcyB0byBtYWtlIHN1cmUgd2UgZG8gdGhlCiAgU1NML1RMUyBuZWdvdGlhdGlvbiBpbW1lZGlhdGVseSBhZnRlciB0aGUgVENQIGNvbm5lY3QgaXMgZG9uZSBhbmQgbm90IGFmdGVyCiAgYSBmZXcgb3RoZXIgY29tbWFuZHMgaGF2ZSBiZWVuIHNlbnQgbGlrZSB3ZSBkaWQgcHJldmlvdXNseS4gSSBkb24ndCBjb25zaWRlcgogIHRoaXMgY2hhbmdlIG5lY2Vzc2FyeSB0byBvYmV5IHRoZSBzdGFuZGFyZHMsIEkgdGhpbmsgdGhpcyBzZXJ2ZXIgaXMgcGlja2llcgogIHRoYW4gd2hhdCB0aGUgc3BlY3MgYWxsb3cgaXQgdG8gYmUsIGJ1dCBJIGNhbid0IHNlZSBob3cgdGhpcyBtb2RpZmllZAogIGxpYmN1cmwgY29kZSBjYW4gYWRkIGFueSBwcm9ibGVtcyB0byB0aG9zZSB3aG8gYXJlIGludGVycHJldGluZyB0aGUKICBzdGFuZGFyZHMgbW9yZSBsaWJlcmFsbHkuCgpEYW5pZWwgKDE3IEF1Z3VzdCAyMDA1KQotIEplZmYgUG9obG1leWVyIGZvdW5kIG91dCB0aGF0IGlmIHlvdSBhc2sgbGliY3VybCB0byBsb2FkIGEgY29va2llZmlsZSAod2l0aAogIENVUkxPUFRfQ09PS0lFRklMRSksIGFkZCBhIGNvb2tpZSAod2l0aCBDVVJMT1BUX0NPT0tJRUxJU1QpLCB0ZWxsIGl0IHRvCiAgd3JpdGUgdGhlIHJlc3VsdCB0byBhIGdpdmVuIGNvb2tpZSBqYXIgYW5kIHRoZW4gbmV2ZXIgYWN0dWFsbHkgY2FsbAogIGN1cmxfZWFzeV9wZXJmb3JtKCkgLSB0aGUgZ2l2ZW4gZmlsZShzKSB0byByZWFkIHdhcyBuZXZlciByZWFkIGJ1dCB0aGUKICBvdXRwdXQgZmlsZSB3YXMgd3JpdHRlbiBhbmQgdGh1cyBpdCBjYXVzZWQgYSAiZnVubnkiIHJlc3VsdC4KCi0gV2hpbGUgZG9pbmcgc29tZSB0ZXN0cyBmb3IgdGhlIGJ1ZyBhYm92ZSwgSSBub3RpY2VkIHRoYXQgRmlyZWZveCBnZW5lcmF0ZXMKICBsYXJnZSBudW1iZXJzIChmb3IgdGhlIGV4cGlyZSB0aW1lKSBpbiB0aGUgY29va2llcy50eHQgZmlsZSBhbmQgbGliY3VybAogIGRpZG4ndCB0cmVhdCB0aGVtIHByb3Blcmx5LiBOb3cgaXQgZG9lcy4KCkRhbmllbCAoMTUgQXVndXN0IDIwMDUpCi0gQWRkZWQgbW9yZSB2ZXJib3NlICJ3YXJuaW5nIiBtZXNzYWdlcyB0byB0aGUgY3VybCBjbGllbnQgZm9yIGNhc2VzIHdoZXJlIGl0CiAgZmFpbHMgdG8gb3Blbi9yZWFkIGZpbGVzIGV0YyB0byBoZWxwIHVzZXJzIGRpYWdub3NlIHdoeSBpdCBkb2Vzbid0IGRvIHdoYXQKICB5b3UnZCBleHBlY3QgaXQgdG8uIENvbnZlcnRlZCBsb3RzIG9mIG9sZCBtZXNzYWdlcyB0byB1c2UgdGhlIG5ldyBnZW5lcmljCiAgZnVuY3Rpb24gSSB3cm90ZSBmb3IgdGhpcyBwdXJwb3NlLgoKRGFuaWVsICgxMyBBdWd1c3QgMjAwNSkKLSBKYW1lcyBCdXJzYSBpZGVudGlmaWVkIGEgbGliY3VybCBIVFRQIGJ1ZyBhbmQgYSBnb29kIHdheSB0byByZXBlYXQgaXQuIElmIGEKICBzaXRlIHJlc3BvbmRzIHdpdGggYmFkIEhUVFAgcmVzcG9uc2UgdGhhdCBkb2Vzbid0IGNvbnRhaW4gYW55IGhlYWRlciBhdCBhbGwsCiAgb25seSBhIHJlc3BvbnNlIGJvZHksIGFuZCB0aGUgd3JpdGUgY2FsbGJhY2sgcmV0dXJucyAwIHRvIGFib3J0IHRoZQogIHRyYW5zZmVyLCBpdCBkaWRuJ3QgaGF2ZSBhbnkgcmVhbCBlZmZlY3QgYnV0IHRoZSB3cml0ZSBjYWxsYmFjayB3b3VsZCBiZQogIGNhbGxlZCBvbmNlIG1vcmUgYW55d2F5LgoKRGFuaWVsICgxMiBBdWd1c3QgMjAwNSkKLSBCYXNlZCBvbiBSaWNoYXJkIENsYXl0b24ncyByZXBvcnRzLCBJIGZvdW5kIG91dCB0aGF0IHVzaW5nIGN1cmwgLWQgQGZpbGVuYW1lCiAgd2hlbiAnZmlsZW5hbWUnIHdhcyBub3QgcG9zc2libGUgdG8gYWNjZXNzIG1hZGUgY3VybCB1c2UgYSBHRVQgcmVxdWVzdAogIGluc3RlYWQuCgotIFRoZSB0aW1lIGNvbmRpdGlvbiBpbGxlZ2FsIHN5bnRheCB3YXJuaW5nIGlzIG5vdyBpbmhpYml0ZWQgaWYgLXMgaXMgdXNlZC4KCkRhbmllbCAoMTAgQXVndXN0IDIwMDUpCi0gTWFyaW8gU2Nocm9lZGVyIGZvdW5kIG91dCB0aGF0IG9uZSBvZiB0aGUgZGVidWcgY2FsbGJhY2tzIGNhbGxzIHRoYXQgcmVnYXJkcwogIFNTTCBkYXRhIHdpdGggdGhlIENVUkxJTkZPX1RFWFQgdHlwZSBjbGFpbWVkIHRoYXQgdGhlIGRhdGEgd2FzIG9uZSBieXRlCiAgbGFyZ2VyIHRoYW4gaXQgYWN0dWFsbHkgaXMsIHRodXMgZmFsc2VseSB0ZWxsaW5nIHRoZSBhcHBsaWNhdGlvbiB0aGF0IHRoZQogIHRlcm1pbmF0aW5nIHplcm8gd2FzIHBhcnQgb2YgdGhlIGRhdGEuCgpEYW5pZWwgKDkgQXVndXN0IDIwMDUpCi0gQ2hyaXN0b3BoZXIgUi4gUGFsbWVyIGZpeGVkIHRoZSBvZmZzZXRzIHVzZWQgZm9yIGRhdGUgcGFyc2luZ3Mgd2hlbiB0aGUgdGltZQogIHpvbmUgbmFtZSBvZiBhIGRheWxpZ2h0IHNhdmluZ3MgdGltZSB3YXMgdXNlZC4gRm9yIGV4YW1wbGUsIFBEVCB2cyBQRFMuIFRoaXMKICBmbGF3IHdhcyBpbnRyb2R1Y2VkIHdpdGggdGhlIG5ldyBkYXRlIHBhcnNlciAoMTEgc2VwIDIwMDQgLSA3LjEyLjIpLgogIEZvcnR1bmF0ZWx5LCBubyB3ZWIgc2VydmVyIG9yIGNvb2tpZSBzdHJpbmcgZXRjIHNob3VsZCBiZSB1c2luZyBzdWNoIHRpbWUKICB6b25lIG5hbWVzIHRodXMgbGltaXRpbmcgdGhlIGVmZmVjdCBvZiB0aGlzIGJ1Zy4KCkRhbmllbCAoOCBBdWd1c3QgMjAwNSkKLSBKb24gR3J1YmJzIGZpbGVkIGJ1ZyByZXBvcnQgIzEyNDk5NjIgd2hpY2ggaWRlbnRpZmllZCBhIHByb2JsZW0gd2l0aCBOVExNIG9uCiAgYSBIVFRQIHByb3h5IGlmIGFuIEZUUCBVUkwgd2FzIGdpdmVuLiBsaWJjdXJsIG5vdyBwcm9wZXJseSBzd2l0Y2hlcyB0byBwdXJlCiAgSFRUUCBpbnRlcm5hbGx5IHdoZW4gYW4gSFRUUCBwcm94eSBpcyB1c2VkLCBldmVuIGZvciBGVFAgVVJMcy4gVGhlIHByb2JsZW0KICB3b3VsZCBhbHNvIG9jY3VyIHdpdGggb3RoZXIgbXVsdGktcGFzcyBhdXRoIG1ldGhvZHMuCgpEYW5pZWwgKDcgQXVndXN0IDIwMDUpCi0gV2hlbiBjdXJsIGlzIGJ1aWx0IHdpdGggR251VExTLCBjdXJsLWNvbmZpZyBkaWRuJ3QgaW5jbHVkZSAiU1NMIiB3aGVuCiAgLS1mZWF0dXJlcyB3YXMgdXNlZC4KCkRhbmllbCAoMjggSnVseSAyMDA1KQotIElmIGFueSBvZiB0aGUgb3B0aW9ucyBDVVJMT1BUX0hUVFBHRVQsIENVUkxPUFRfUE9TVCBhbmQgQ1VSTE9QVF9IVFRQUE9TVCBpcwogIHNldCB0byAxLCBDVVJMT1BUX05PQk9EWSB3aWxsIG5vdyBhdXRvbWF0aWNhbGx5IGJlIHNldCB0byAwLgoKRGFuaWVsICgyNyBKdWx5IDIwMDUpCi0gRGFuIEZhbmRyaWNoIGNoYW5nZXMgb3ZlciB0aGUgbGFzdCB3ZWVrOiBmaXhlZCBudW1lcm91cyBtaW5vciBjb25maWd1cmUKICBvcHRpb24gcGFyc2luZyBmbGF3czogLS13aXRob3V0LWdudXRscywgLS13aXRob3V0LXNwbmVnbyAtLXdpdGhvdXQtZ3NzYXBpCiAgYW5kIC0td2l0aG91dC1rcmI0LiBTcGVsbGZpeGVkIHNldmVyYWwgZXJyb3IgbWVzc2FnZXMuCgotIFBldGVyaXMgS3J1bWlucyBhZGRlZCBDVVJMT1BUX0NPT0tJRUxJU1QgYW5kIENVUkxJTkZPX0NPT0tJRUxJU1QsIHdoaWNoIGlzIGEKICBzaW1wbGUgaW50ZXJmYWNlIHRvIGV4dHJhY3RpbmcgYW5kIHNldHRpbmcgY29va2llcyBpbiBsaWJjdXJsJ3MgaW50ZXJuYWwKICAiY29va2llIGphciIuIFNlZSB0aGUgbmV3IGNvb2tpZV9pbnRlcmZhY2UuYyBleGFtcGxlIGNvZGUuCgpEYW5pZWwgKDEzIEp1bHkgMjAwNSkKLSBEaWVnbyBDYXNvcnJhbiBwcm92aWRlZCBwYXRjaGVzIHRvIG1ha2UgY3VybCBidWlsZCBmaW5lIG9uIEFtaWdhIGFnYWluLgoKRGFuaWVsICgxMiBKdWx5IDIwMDUpCi0gQWRyaWFuIFNjaHV1ciBhZGRlZCB0cmFpbGVyIHN1cHBvcnQgaW4gdGhlIGNodW5rZWQgZW5jb2Rpbmcgc3RyZWFtLiBUaGUKICB0cmFpbGVyIGlzIHRoZW4gc2VudCB0byB0aGUgbm9ybWFsIGhlYWRlciBjYWxsYmFjay9zdHJlYW0uIEkgd3JvdGUgdXAgdGVzdAogIGNhc2UgMjY2IHRvIHZlcmlmeSB0aGUgYmFzaWMgZnVuY3Rpb25hbGl0eS4gRG8gbm90ZSB0aGF0IHRlc3QgY2FzZSAzNAogIGNvbnRhaW5zIGEgZmxhd2VkIGNodW5rZWQgZW5jb2Rpbmcgc3RyZWFtIHRoYXQgc3RpbGwgd29ya3MgdGhlIHNhbWUuCgpEYW5pZWwgKDUgSnVseSAyMDA1KQotIEdpc2xlIFZhbmVtIGNhbWUgdXAgd2l0aCBhIG5pY2UgbGl0dGxlIHdvcmstYXJvdW5kIGZvciBidWcgIzEyMzAxMTguIEl0CiAgc2VlbXMgdGhlIFdpbmRvd3MgKE1TVkMpIGxpYmMgdGltZSBmdW5jdGlvbnMgbWF5IHJldHVybiBkYXRhIG9uZSBob3VyIG9mZiBpZgogIFRaIGlzIG5vdCBzZXQgYW5kIGF1dG9tYXRpYyBEU1QgYWRqdXN0bWVudCBpcyBlbmFibGVkLiBUaGlzIG1hZGUKICBjdXJsX2dldGRhdGUoKSByZXR1cm4gd3JvbmcgdmFsdWUsIGFuZCBpdCBhbHNvIGNvbmNlcm5lZCBpbnRlcm5hbCBjb29raWUKICBleHBpcmF0aW9ucyBldGMuCgpEYW5pZWwgKDQgSnVseSAyMDA1KQotIEFuZHJldyBCdXNobmVsbCBwcm92aWRlZCBlbm91Z2ggaW5mbyBmb3IgbWUgdG8gdGVsbCB0aGF0IHdlIGJhZGx5IG5lZWRlZCB0bwogIGZpeCB0aGUgQ09OTkVDVCBhdXRoZW50aWNhdGlvbiBjb2RlIHdpdGggbXVsdGktcGFzcyBhdXRoIG1ldGhvZHMgKHN1Y2ggYXMKICBOVExNKSBhcyBpdCBkaWRuJ3QgcHJldmlvdXNseSBwcm9wZXJseSBpZ25vcmUgcmVzcG9uc2UtYm9kaWVzIC0gaW4gZmFjdCBpdAogIHN0b3BwZWQgcmVhZGluZyBhZnRlciBhbGwgcmVzcG9uc2UgaGVhZGVycyBoYWQgYmVlbiByZWNlaXZlZC4gVGhpcyBjb3VsZAogIGxlYWQgdG8gbGliY3VybCBzZW5kaW5nIHRoZSBuZXh0IHJlcXVlc3QgYW5kIHJlYWRpbmcgdGhlIGJvZHkgZnJvbSB0aGUgZmlyc3QKICByZXF1ZXN0IGFzIHJlc3BvbnNlIHRvIHRoZSBzZWNvbmQgcmVxdWVzdC4gKEkgYWxzbyByZW5hbWVkIHRoZSBmdW5jdGlvbiwKICB3aGljaCB3YXNuJ3Qgc3RyaWN0bHkgbmVjZXNzYXJ5IGJ1dC4uLikKCiAgVGhlIGJlc3QgZml4IHdvdWxkIHRvIG9uY2UgYW5kIGZvciBhbGwgbWFrZSB0aGUgQ09OTkVDVCBjb2RlIHVzZSB0aGUKICBvcmRpbmFyeSByZXF1ZXN0IHNlbmRpbmcvcmVjZWl2aW5nIGNvZGUsIHRyZWF0aW5nIGl0IGFzIGFueSBvcmRpbmFyeSByZXF1ZXN0CiAgaW5zdGVhZCBvZiB0aGUgc3BlY2lhbC1wdXJwb3NlIGZ1bmN0aW9uIHdlIGhhdmUgbm93LiBJdCBzaG91bGQgbWFrZSBpdAogIGJldHRlciBmb3IgbXVsdGktaW50ZXJmYWNlIHRvby4gQW5kIHBvc3NpYmx5IGxlYWQgdG8gbGVzcyBjb2RlLi4uCgogIEFkZGVkIHRlc3QgY2FzZSAyNjUgZm9yIHRoaXMuIEl0IGRvZXNuJ3Qgd29yayBhcyBhIF9yZWFsbHlfIGdvb2QgdGVzdCBjYXNlCiAgc2luY2UgdGhlIHRlc3QgcHJveHkgaXMgdG9vIHN0dXBpZCwgYnV0IHRoZSB0ZXN0IGNhc2UgaGVscHMgd2hlbiBydW5uaW5nIHRoZQogIGRlYnVnZ2VyIHRvIHZlcmlmeS4KCkRhbmllbCAoMzAgSnVuZSAyMDA1KQotIERhbiBGYW5kcmljaCBpbXByb3ZlZCB0aGUgY29uZmlndXJlIHNjcmlwdCdzIGFiaWxpdHkgdG8gZmlndXJlIG91dCB3aGF0IGtpbmQKICBvZiBzdHJlcnJvcl9yKCkgQVBJIHRoYXQgaXMgdXNlZCB3aGVuIGNyb3NzLWNvbXBpbGluZy4gSWYgX19HTElCX18gaXMKICBkZWZpbmVkLCBpdCBhc3N1bWVzIHRoZSBnbGliYyBBUEkuIElmIG5vdCwgaXQgaXNzdWVzIGEgbm90aWNlIGFzIGJlZm9yZSB0aGF0CiAgdGhlIHVzZXIgbmVlZHMgdG8gbWFudWFsbHkgZWRpdCBsaWIvY29uZmlnLmggZm9yIHRoaXMuCgpEYW5pZWwgKDIzIEp1bmUgMjAwNSkKLSBEYXZpZCBTaGF3J3MgZml4IHRoYXQgdW5pZmllcyBwcm94eSBzdHJpbmcgdHJlYXRtZW50IHNvIHRoYXQgYSBwcm94eSBnaXZlbgogIHdpdGggQ1VSTE9QVF9QUk9YWSBjYW4gdXNlIGEgaHR0cDovLyBwcmVmaXggYW5kIHVzZXIgKyBwYXNzd29yZC4gVGhlIHVzZXIKICBhbmQgcGFzc3dvcmQgZmllbGRzIGFyZSBub3cgYWxzbyBVUkwgZGVjb2RlZCBwcm9wZXJseS4gVGVzdCBjYXNlIDI2NCBhZGRlZAogIHRvIHZlcmlmeS4KCkRhbmllbCAoMjIgSnVuZSAyMDA1KQotIERhdmlkIFNoYXcgdXBkYXRlZCBsaWJjdXJsLm00CgpEYW5pZWwgKDE0IEp1bmUgMjAwNSkKLSBHaXNsZSBWYW5lbSBmaXhlZCBhIHBvdGVudGlhbCB0aHJlYWQgaGFuZGxlIGxlYWsuIEJ1ZyByZXBvcnQgIzEyMTY1MDAuCiAgQ29tbWVudCBpbiBodHRwOi8vY3VybC5oYXh4LnNlL21haWwvbGliLTIwMDUtMDYvMDA1OS5odG1sCgpEYW5pZWwgKDEzIEp1bmUgMjAwNSkKLSBNYWRlIGJ1aWxkY29uZiBydW4gbGlidG9vbGl6ZSBpbiB0aGUgYXJlcyBkaXIgdG9vIChpbnNwaXJlZCBieSBUdXBvbmUncwogIHJldmVydGVkIHBhdGNoKS4KCkRhbmllbCAoOSBKdW5lIDIwMDUpCi0gSW5jb3Jwb3JhdGVkIFR1cG9uZSdzIGZpbmR0b29sIGZpeCBpbiBidWlsZGNvbmYgKHNsaWdodGx5IGVkaXRlZCkKCi0gSW5jb3Jwb3JhdGVkIFR1cG9uZSdzIGhlYWQgLW4gZml4IGluIGJ1aWxkY29uZi4KCkRhbmllbCAoOCBKdW5lIDIwMDUpCi0gUmV2ZXJ0ZWQgVHVwb25lJ3MgcGF0Y2ggYWdhaW4sIGl0IGJyb2tlIG51bWVyb3VzIGF1dG9idWlsZHMuIExldCdzIGFwcGx5IGl0CiAgaW4gcGllY2VzLCBvbmUgYnkgb25lIGFuZCBzZWUgd2hhdCB3ZSBuZWVkIHRvIGFkanVzdCB0byB3b3JrIGFsbCBvdmVyLgoKRGFuaWVsICg2IEp1bmUgMjAwNSkKLSBUdXBvbmUgQWxmcmVkbyBmaXhlZCB0aHJlZSBwcm9ibGVtcyBpbiBidWlsZGNvbmY6CgogIDEpIGZpbmR0b29sIGRvZXMgbG9vayBwZXIgdG9vbCBpbiBQQVRIIGFuZCB0aGluayAuL3BlcmwgaXMgdGhlIHBlcmwKICBleGVjdXRhYmxlLCB3aGlsZSBpcyBqdXN0IGEgbG9jYWwgZGlyZWN0b3J5IChJIGhhdmUgLiBpbiB0aGUgUEFUSCkKCiAgMikgSSBnb3Qgc2V2ZXJhbCB3YXJuaW5nIGZvciBoZWFkIC0xIGRlcHJlY2F0ZWQgaW4gZmF2b3VyIG9mIGhlYWQgLW4gMQogCiAgMykgYXJlcyBkaXJlY3RvcnkgaXMgbWlzc2luZyBzb21lIGZpbGUgKG1pc3NpbmcgaXMgbWlzc2luZyA6LSkgKSBiZWNhdXNlCiAgYXV0b21ha2UgYW5kIGZyaWVuZHMgaXMgbm90IHJ1bi4KCkRhbmllbCAoMyBKdW5lIDIwMDUpCi0gQWRkZWQgZG9jcy9saWJjdXJsL2dldGluZm8tdGltZXMsIGJhc2VkIG9uIGZlZWRiYWNrIGZyb20gJ0VkaSc6CiAgaHR0cDovL2N1cmwuaGF4eC5zZS9mZWVkYmFjay9kaXNwbGF5LmNnaT9pZD0xMTE3ODMyNTc5ODI5OSZzdXBwb3J0PXllcwoKLSBBbmRyZXMgR2FyY2lhIHByb3ZpZGVkIHlldCBhbm90aGVyIHRleHQgbW9kZSBwYXRjaCBmb3Igc2V2ZXJhbCB0ZXN0IGNhc2VzIHNvCiAgdGhhdCB0aGV5IGRvIHRleHQgY29tcGFyaXNpb25zIGJldHRlciBvbiBXaW5kb3dzIChuZXdsaW5lLXdpc2UpLgoKRGFuaWVsICgxIEp1bmUgMjAwNSkKLSBUaGUgY29uZmlndXJlIGNoZWNrIGZvciBjLWFyZXMgbm93IGFkZHMgdGhlIGNhcmVzIGxpYiBiZWZvcmUgdGhlIG90aGVyIGxpYnMsCiAgdG8gbWFrZSBpdCBidWlsZCBmaW5lIHdpdGggbWluZ3cuIEluc3BpcmVkIGJ5IFR1cG9uZSBBbGZyZWRvJ3MgYnVnIHJlcG9ydAogIChhbmQgcGF0Y2gpICMxMjEyOTQwCgpEYW5pZWwgKDMxIE1heSAyMDA1KQotIFRvZGQgS3VsZXN6YSByZXBvcnRlZCBhIGZsYXcgaW4gdGhlIHByb3h5IG9wdGlvbiwgc2luY2UgYSBudW1lcmljYWwgSVB2NgogIGFkZHJlc3Mgd2FzIG5vdCBwb3NzaWJsZSB0byB1c2UuIEl0IGlzIG5vdywgYnV0IHJlcXVpcmVzIGl0IHdyaXR0ZW4KICBSRkMyNzMyLXN0eWxlLCB3aXRoaW4gYnJhY2tldHMgLSB3aGljaCBpbmNpZGVudGx5IGlzIGhvdyB5b3UgZW50ZXIgbnVtZXJpY2FsCiAgSVB2NiBhZGRyZXNzZXMgaW4gVVJMcy4gVGVzdCBjYXNlIDI2MyBhZGRlZCB0byB2ZXJpZnkuCgpEYW5pZWwgKDMwIE1heSAyMDA1KQotIEVyaWMgQ29vcGVyIHJlcG9ydGVkIGFib3V0IGEgcHJvYmxlbSB3aXRoIEhUVFAgc2VydmVycyB0aGF0IHJlc3BvbmRzIHdpdGgKICBiaW5hcnkgemVyb2VzIHdpdGhpbiB0aGUgaGVhZGVycy4gVGhleSBjb25mdXNlZCBsaWJjdXJsIHRvIGRvIHdyb25nIHNvIHRoZQogIGRvd25sb2FkZWQgaGVhZGVycyBiZWNvbWUgaW5jb21wbGV0ZS4gVGhlIGZpeCBpcyBub3cgdmVyaWZpZWQgd2l0aCB0ZXN0IGNhc2UKICAyNjIuCgpEYW5pZWwgKDI1IE1heSAyMDA1KQotIEZpeGVkIHByb2JsZW1zIHdpdGggdGhlIHRlc3Qgc3VpdGUsIGFuZCBpbiBwYXJ0aWN1bGFyIHRoZSBGVFAgdGVzdCBjYXNlcwogIHNpbmNlIGl0IHByZXZpb3VzbHkgd2FzIGZhaWxpbmcgZXZlcnkgbm93IGFuZCB0aGVuIGluIGEgbm9uc2Vuc2UgbWFubmVyLgoKLSAtLXRyYWNlLXRpbWUgbm93IG91dHB1dHMgdGhlIGZ1bGwgbWljcm9zZWNvbmQsIGFsbCA2IGRpZ2l0cy4KCkRhbmllbCAoMjQgTWF5IDIwMDUpCi0gQW5kcmVzIEdhcmNpYSBwcm92aWRlZCBhIHRleHQgbW9kZSBwYXRjaCBmb3Igc2V2ZXJhbCB0ZXN0IGNhc2VzIHNvIHRoYXQgdGhleQogIGRvIHRleHQgY29tcGFyaXNpb25zIGJldHRlciBvbiBXaW5kb3dzIChuZXdsaW5lLXdpc2UpLgoKLSBBbnkgMnh4IHJlc3BvbnNlIChhbmQgbm90IGp1c3QgMjAwKSBpcyBub3cgY29uc2lkZXJlZCBhIGZpbmUgcmVzcG9uc2UgdG8KICBUWVBFLCBhcyBzb21lIHNlcnZlcnMgb2J2aW91c2x5IHNlbmRzIGEgMjI2IHRoZXJlLiBBZGRlZCB0ZXN0IGNhc2UgMjYxIHRvCiAgdmVyaWZ5LiBCYXNlZCBvbiBhIHF1ZXN0aW9uL3JlcG9ydCBieSBHZW9yZyBXaWNoZXJza2kuCgpEYW5pZWwgKDIwIE1heSAyMDA1KQotIEltcHJvdmVkIHJ1bnRlc3RzLnBsIHRvIGFsbG93IHN0ZG91dCB0ZXN0cyB0byBiZSBtb2RlPXRleHQgYXMgd2VsbCwganVzdAogIGFzIGZpbGUgY29tcGFyaXNvbnMgYWxyZWFkeSBzdXBwb3J0cy4gQWRkZWQgdGhpcyBpbmZvIHRvIHRoZSBGSUxFRk9STUFUCiAgZG9jcy4KCkRhbmllbCAoMTggTWF5IDIwMDUpCi0gSm9obiBNY0dvd2FuIGlkZW50aWZpZWQgYSBwcm9ibGVtIGluIGJ1ZyByZXBvcnQgIzEyMDQ0MzUgd2l0aCBtYWxmb3JtZWQgVVJMcwogIGxpa2UgImh0dHA6Ly9zb21laG9zdD9kYXRhIiBhcyBpdCBhZGRlZCBhIHNsYXNoIHRvbyBtdWNoIGluIHRoZSByZXF1ZXN0CiAgKCJHRVQgLz9kYXRhLyIuLi4pLiBBZGRlZCB0ZXN0IGNhc2UgMjYwIHRvIHZlcmlmeS4KCi0gVGhlIGNvbmZpZ3VyZSBjaGVjayBmb3Igc3RyZXJyb3JfcigpIGZhaWxlZCB0byBkZXRlY3QgdGhlIHByb3BlciBBUEkgYXQKICB0aW1lcywgbGlrZSBvbiBIUC1VWCAxMC4yMC4gVGhlbiBsaWIvc3RyZXJyb3IuYyBiYWRseSBhc3N1bWVkIHRoZSBnbGliYwogIHZlcnNpb24gaWYgdGhlIHBvc2l4IGRlZmluZSB3YXNuJ3Qgc2V0IChzaW5jZSBpdCBfaGFkXyBmb3VuZCBhIHN0cmVycm9yX3IpLgoKRGFuaWVsICgxNiBNYXkgMjAwNSkKLSBUaGUgZ210aW1lX3IoKSBmdW5jdGlvbiBpbiBIUC1VWCAxMC4yMCBpcyBicm9rZW4uIEFib3V0IDEzIHRlc3QgY2FzZXMgZmFpbAogIGR1ZSB0byB0aGlzLiBUaGVyZSdzIG5vdyBhIGNvbmZpZ3VyZSBjaGVjayB0aGF0IGF0dGVtcHRzIHRvIGRldGVjdCB0aGUgYmFkCiAgZnVuY3Rpb24gYW5kIG5vdCB1c2UgaXQgb24gc3VjaCBzeXN0ZW1zLgoKVmVyc2lvbiA3LjE0LjAgKDE2IE1heSAyMDA1KQoKRGFuaWVsICgxMyBNYXkgMjAwNSkKLSBHcmlnb3J5IEVudGluIHJlcG9ydGVkIHRoYXQgY3VybCdzIGNvbmZpZ3VyZSBkZXRlY3RzIGEgZmluZSBwb2xsKCkgZm9yIE1hYwogIE9TIFggMTAuNCAod2hpbGUgMTAuMyBvciBsYXRlciBkZXRlY3RlZCBhICJiYWQiIG9uZSksIGJ1dCB0aGUgZXhlY3V0YWJsZQogIGRvZXNuJ3Qgd29yayBhcyBnb29kIGFzIGlmIGJ1aWx0IHdpdGhvdXQgcG9sbCgpLiBJJ3ZlIGFkanVzdGVkIHRoZSBjb25maWd1cmUKICB0byBhbHdheXMgc2tpcCB0aGUgZmluZS1wb2xsKCkgdGVzdCBvbiBNYWMgT1MgWCAoZGFyd2luKS4KCkRhbmllbCAoMTIgTWF5IDIwMDUpCi0gV2hlbiBkb2luZyBhIHNlY29uZCByZXF1ZXN0IChhZnRlciBhIGRpc2Nvbm5lY3QpIHVzaW5nIHRoZSBzYW1lIGVhc3kgaGFuZGxlLAogIG92ZXIgYSBwcm94eSB0aGF0IHVzZXMgTlRMTSBhdXRoZW50aWNhdGlvbiwgbGliY3VybCBmYWlsZWQgdG8gdXNlIE5UTE0gYWdhaW4KICBwcm9wZXJseSAodGhlIGF1dGggbWV0aG9kIHdhcyBhY2NpZGVudGFsbHkgcmVzZXQgdG8gdGhlIHNhbWUgYXMgaGFkIGJlZW4gc2V0CiAgZm9yIGhvc3QgYXV0aCwgd2hpY2ggZGVmYXVsdHMgdG8gQmFzaWMpLiBCdWcgcmVwb3J0ICMxMjAwNjYxIGlkZW50aWZpZWQgdGhlCiAgdGhlIHByb2JsZW0gYW5kIHRoZSBmaXguCgotIElmIC16Ly0tdGltZS1jb25kIGlzIHVzZWQgd2l0aCBhbiBpbnZhbGlkIGRhdGUgc3ludGF4LCB0aGlzIGlzIG5vIGxvbmdlcgogIHNpbGVudGx5IGRpc2NhcmRlZC4gSW5zdGVhZCBhIHByb3BlciB3YXJuaW5nIG1lc3NhZ2UgaXMgZGlwbGF5ZWQgdGhhdAogIGluZm9ybXMgYWJvdXQgaXQuIEJ1dCBpdCBzdGlsbCBjb250aW51ZXMgd2l0aG91dCB0aGUgY29uZGl0aW9uLgoKVmVyc2lvbiA3LjE0LjAtcHJlMiAoMTEgTWF5IDIwMDUpCgpEYW5pZWwgKDExIE1heSAyMDA1KQotIFN0YXJ0aW5nIG5vdywgbGliY3VybCBzZW5kcyBhIGxpdHRsZSBkaWZmZXJlbnQgc2V0IG9mIGhlYWRlcnMgaW4gaXRzIGRlZmF1bHQKICBIVFRQIHJlcXVlc3RzOgogIAogIEEpIE5vcm1hbCBub24tcHJveHkgSFRUUDoKICAgIC0gbm8gbW9yZSAiUHJhZ21hOiBuby1jYWNoZSIgKHRoaXMgb25seSBtYWtlcyBzZW5zZSB0byBwcm94aWVzKQoKICBCKSBOb24tQ09OTkVDVCBIVFRQIHJlcXVlc3Qgb3ZlciBwcm94eToKICAgIC0gIlByYWdtYTogbm8tY2FjaGUiIGlzIHVzZWQgKGxpa2UgYmVmb3JlKQogICAgLSAiUHJveHktQ29ubmVjdGlvbjogS2VlcC1hbGl2ZSIgKGZvciBvbGRlciBzdHlsZSAxLjAtcHJveGllcykKCiAgQykgQ09OTkVDVCBIVFRQIHJlcXVlc3Qgb3ZlciBwcm94eToKICAgIC0gIkhvc3Q6IFtuYW1lXTpbcG9ydF0iCiAgICAtICJQcm94eS1Db25uZWN0aW9uOiBLZWVwLWFsaXZlIgoKICBUaGUgQSkgY2FzZSBpcyBtb3N0bHkgdG8gcmVkdWNlIHRoZSBkZWZhdWx0IGhlYWRlciBzaXplIGFuZCByZW1vdmUgYQogIHBvaW50bGVzcyBoZWFkZXIuCgogIFRoZSBCKSBpcyB0byBhZGRyZXNzIChyYXJlKSBwcm9ibGVtcyB3aXRoIEhUVFAgMS4wIHByb3hpZXMKCiAgVGhlIEMpIGhlYWRlcnMgYXJlIGJvdGggdG8gYWRkcmVzcyAocmFyZSkgcHJvYmxlbXMgd2l0aCBzb21lIHByb3hpZXMuIFRoZQogIGNvZGUgaW4gbGliY3VybCB0aGF0IGRlYWxzIHdpdGggQ09OTkVDVCByZXF1ZXN0cyBuZWVkIGEgcmV3cml0ZSwgYnV0IGl0CiAgZmVlbHMgbGlrZSBhIHRvbyBiaWcgYSBqb2IgZm9yIG1lIHRvIGRvIG5vdy4gRGV0YWlscyBhcmUgYWRkZWQgaW4gdGhlIGNvZGUKICBjb21tZW50cyBmb3Igbm93LgoKICBVcGRhdGVkIGEgbGFyZ2UgYW1vdW50IG9mIHRlc3QgY2FzZXMgdG8gcmVmbGVjdCB0aGUgbmV3cy4KCkRhbmllbCAoMTAgTWF5IDIwMDUpCi0gSGFsZi1iYWtlZCBhdHRlbXB0IHRvIGJhaWwgb3V0IGlmIHNlbGVjdCgpIHJldHVybnMgX29ubHlfIGVycm9yZmRzIHdoZW4gdGhlCiAgdHJhbnNmZXIgaXMgaW4gcHJvZ3Jlc3MuIEFuIGF0dGVtcHQgdG8gZml4IEFsbGFuJ3MgcHJvYmxlbS4gU2VlCiAgaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsL2xpYi0yMDA1LTA1LzAwNzMuaHRtbCBhbmQgdGhlIHJlc3Qgb2YgdGhhdCB0aHJlYWQKICBmb3IgZGV0YWlscy4KCiAgSSdtIHN0aWxsIG5vdCBzdXJlIHRoaXMgaXMgdGhlIHJpZ2h0IGZpeCwgYnV0Li4uCgpWZXJzaW9uIDcuMTQuMC1wcmUxICg5IE1heSAyMDA1KQoKRGFuaWVsICgyIE1heSAyMDA1KQotIFNvcnQgb2YgImZpeGVkIiBLTk9XTl9CVUdTICM0OiBjdXJsIG5vdyBidWlsZHMgSVB2NiBlbmFibGVkIG9uIEFJWCA0LjMuIEF0CiAgbGVhc3QgaXQgc2hvdWxkIG5vIGxvbmdlciBjYXVzZSBhIGNvbXBpbGVyIGVycm9yLiBIb3dldmVyLCBpdCBkb2VzIG5vdCBoYXZlCiAgQUlfTlVNRVJJQ0hPU1Qgc28gd2UgY2Fubm90IGdldGFkZHJpbmZvKCkgYW55IG51bWVyaWNhbCBhZGRyZXNzZXMgd2l0aCBpdAogICh3ZSB1c2UgdGhhdCBmb3IgRlRQIFBPUlQvRVBSVCkhIFNvLCBJIG1vZGlmaWVkIHRoZSBjb25maWd1cmUgY2hlY2sgdGhhdAogIGNoZWNrcyBpZiB0aGUgZ2V0YWRkcmluZm8oKSBpcyB3b3JraW5nLCB0byB1c2UgQUlfTlVNRVJJQ0hPU1Qgc2luY2UgdGhlbgogIGl0J2xsIGZhaWwgb24gQUlYIDQuMyBhbmQgaXQgd2lsbCBhdXRvbWF0aWNhbGx5IGJ1aWxkIHdpdGggSVB2NiBzdXBwb3J0CiAgZGlzYWJsZWQuCgotIEFkZGVkIC0tdHJhY2UtdGltZSB0aGF0IHdoZW4gdXNlZCBhZGRzIGEgdGltZSBzdGFtcCB0byBlYWNoIHRyYWNlIGxpbmUgdGhhdAogIC0tdHJhY2UsIC0tdHJhY2UtYXNjaWkgYW5kIC0tdmVyYm9zZSBvdXRwdXQuIEkgYWxzbyBtYWRlIHRoZSAnPicgZGlzcGxheQogIHNlcGFyYXRlIGVhY2ggbGluZSBvbiB0aGUgbGluZWZlZWQgc28gdGhhdCBIVFRQIHJlcXVlc3RzIGV0YyBsb29rIG5pY2VyIGluCiAgdGhlIC12IG91dHB1dC4KCi0gTWFkZSBjdXJsIHJlY29nbml6ZSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIEx5bnggKGFuZCBvdGhlcnM/KSBzdXBwb3J0IGZvcgogIHBvaW50aW5nIG91dCB0aGUgQ0EgY2VydCBwYXRoL2ZpbGU6IFNTTF9DRVJUX0RJUiBhbmQgU1NMX0NFUlRfRklMRS4gSWYKICBDVVJMX0NBX0JVTkRMRSBpcyBub3Qgc2V0LCB0aGV5IGFyZSBjaGVja2VkIGFmdGVyd2FyZHMuCgogIExpa2UgYmVmb3JlOiBvbiB3aW5kb3dzIGlmIG5vbmUgb2YgdGhlc2UgYXJlIHNldCwgaXQgY2hlY2tzIGZvciB0aGUgY2EgY2VydAogIGZpbGUgbGlrZSB0aGlzOgoKICAxLiBhcHBsaWNhdGlvbidzIGRpcmVjdG9yeQogIDIuIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkKICAzLiBXaW5kb3dzIFN5c3RlbSBkaXJlY3RvcnkgKGUuZy4gQzpcd2luZG93c1xzeXN0ZW0zMikKICA0LiBXaW5kb3dzIERpcmVjdG9yeSAoZS5nLiBDOlx3aW5kb3dzKQogIDUuIGFsbCBkaXJlY3RvcmllcyBhbG9uZyAlUEFUSCUKCkRhbmllbCAoMSBNYXkgMjAwNSkKLSBUaGUgcnVudGVzdHMucGwgc2NyaXB0IG5vdyBzdGFydHMgdGVzdCBzZXJ2ZXJzIGJ5IGRvaW5nIGZvcmsoKSBhbmQgZXhlYygpCiAgaW5zdGVhZCBvZiB0aGUgcHJldmlvdXMgYXBwcm9hY2guIFRoaXMgaXMgbGVzcyBjb21wbGljYXRlZCBhbmQgc2hvdWxkCiAgaG9wZWZ1bGx5IGxlYWQgdG8gbGVzcyAibGVha2VkIiBzZXJ2ZXJzIChzZXJ2ZXJzIHRoYXQgYXJlbid0IHN0b3BwZWQKICBwcm9wZXJseSB3aGVuIHRoZSB0ZXN0cyBhcmUgc3RvcHBlZCkuCgotIEFsZXhhbmRlciBaaHVyYXZsZXYgZm91bmQgYSBjYXNlIHdoZW4geW91IGRpZCAiY3VybCAtSSBbVVJMXSIgYW5kIGl0CiAgY29tcGxhaW5lZCBvbiB0aGUgY2h1bmtlZCBlbmNvZGluZywgZXZlbiB0aG91Z2ggYSBIRUFEIHNob3VsZCBuZXZlciByZXR1cm4gYQogIGJvZHkgYW5kIHRodXMgaXQgY2Fubm90IGJlIGEgY2h1bmtlZC1lbmNvZGluZyBwcm9ibGVtIQoKRGFuaWVsICgzMCBBcHJpbCAyMDA1KQotIEFsZXhhbmRlciBaaHVyYXZsZXYgZm91bmQgb3V0IHRoYXQgKGxpYiljdXJsIFNJR1NFR1ZlZCB3aGVuIHVzaW5nCiAgLS1pbnRlcmZhY2Ugb24gYW4gYWRkcmVzcyB0aGF0IGNhbid0IGJlIGJvdW5kLgoKRGFuaWVsICgyOCBBcHJpbCAyMDA1KQotIFdvcmtpbmcgb24gZml4aW5nIHVwIHRlc3QgY2FzZXMgdG8gbWFyayBzZWN0aW9ucyBhcyAnbW9kZT10ZXh0JyBmb3IgdGhpbmdzCiAgdGhhdCBjdXJsIHdyaXRlcyBhcyB0ZXh0IGZpbGVzLCBzaW5jZSB0aGVuIHRoZXkgY2FuIGdldCBkaWZmZXJlbnQgbGluZQogIGVuZGluZ3MgZGVwZW5kaW5nIG9uIE9TLiBBbmRy6XMgR2FyY+1hIGhlbHBzIG1lIHdvcmsgdGhpcyBvdXQuCgogIERpZCBsb3RzIG9mIG90aGVyIG1pbm9yIHR3ZWFrcyBvbiB0aGUgdGVzdCBzY3JpcHRzIHRvIHdvcmsgYmV0dGVyIGFuZCBtb3JlCiAgcmVsaWFibHkgZmluZCB0ZXN0IHNlcnZlcnMgYW5kIGFsc28ga2lsbCB0ZXN0IHNlcnZlcnMuCgotIERhbiBGYW5kcmljaCBwb2ludGVkIG91dCBob3cgdGhlIHJ1bnRlc3RzLnBsIHNjcmlwdCBraWxsZWQgdGhlIEhUVFAgc2VydmVyCiAgaW5zdGVhZCBvZiB0aGUgSFRUUFMgc2VydmVyIHdoZW4gY2xvc2luZyBpdCBkb3duLgoKRGFuaWVsICgyNyBBcHJpbCAyMDA1KQotIFBhdWwgTW9vcmUgbWFkZSBjdXJsIGNoZWNrIGZvciB0aGUgLmN1cmxyYyBmaWxlIChfY3VybHJjIG9uIHdpbmRvd3MpIG9uIHR3bwogIG1vcmUgcGxhY2VzLiBGaXJzdCwgQ1VSTF9IT01FIGlzIGEgbmV3IGVudmlyb25tZW50IHZhcmlhYmxlIHRoYXQgaXMgdXNlZAogIGluc3RlYWQgb2YgSE9NRSBpZiBpdCBpcyBzZXQsIHRvIHBvaW50IG91dCB3aGVyZSB0aGUgZGVmYXVsdCBjb25maWcgZmlsZQogIGxpdmVzLiBJZiB0aGVyZSdzIG5vIGNvbmZpZyBmaWxlIGluIHRoZSBkaXIgcG9pbnRlZCBvdXQgYnkgb25lIG9mIHRoZQogIGVudmlyb25tZW50IHZhcmlhYmxlcywgdGhlIFdpbmRvd3MgdmVyc2lvbiB3aWxsIGluc3RlYWQgY2hlY2sgdGhlIHNhbWUKICBkaXJlY3RvcnkgdGhlIGV4ZWN1dGFibGUgY3VybCBpcyBsb2NhdGVkIGluLgoKRGFuaWVsICgyNiBBcHJpbCAyMDA1KQotIENvcnkgTmVsc29uJ3Mgd29yayBvbiBudWtpbmcgY29tcGlsZXIgd2FybmluZ3Mgd2hlbiBidWlsZGluZyBvbiB4NjQgd2l0aAogIFZTMjAwNS4KCkRhbmllbCAoMjUgQXByaWwgMjAwNSkKLSBGcmVkIE5ldyByZXBvcnRlZCBhIGJ1ZyB3aGVyZSB3ZSB1c2VkIEJhc2ljIGF1dGggYW5kIHVzZXIgbmFtZSBhbmQgcGFzc3dvcmQKICBpbiAubmV0cmMsIGFuZCB3aGVuIGZvbGxvd2luZyBhIExvY2F0aW9uOiB0aGUgc3Vic2VxdWVudCByZXF1ZXN0cyBkaWRuJ3QKICBwcm9wZXJseSB1c2UgdGhlIGF1dGggYXMgZm91bmQgaW4gdGhlIG5ldHJjIGZpbGUuIEFkZGVkIHRlc3QgY2FzZSAyNTcgdG8KICB2ZXJpZnkgbXkgZml4LgoKLSBCYXNlZCBvbiBmZWVkYmFjayBmcm9tIENvcnkgTmVsc29uLCBJIGFkZGVkIHNvbWUgcHJlcHJvY2Vzc29yIG1hZ2ljIGluCiAgKi9zZXR1cC5oIGFuZCAqL2NvbmZpZy13aW4zMi5oIHRvIGJ1aWxkIGZpbmUgd2l0aCBWUzIwMDUgb24geDY0LgoKRGFuaWVsICgyMyBBcHJpbCAyMDA1KQotIEFsZXggU3V5a292IG1hZGUgdGhlIGN1cmwgdG9vbCBub3cgYXNzdW1lIHRoYXQgdXBsb2FkcyB1c2luZyBIVFRQOi8vIG9yCiAgSFRUUFM6Ly8gYXJlIHRoZSBvbmx5IG9uZXMgdGhhdCBzaG93IG91dHB1dCBhbmQgdGh1cyBtb3RpdmF0ZXMgYSBzd2l0Y2hlZAogIG9mZiBwcm9ncmVzcyBtZXRlciBpZiB0aGUgb3V0cHV0IGlzIHNlbnQgdG8gdGhlIHRlcm1pbmFsLiBUaGlzIG1ha2VzIEZUUAogIHVwbG9hZHMgd2l0aG91dCAnPicsIC1vIG9yIC1PIHNob3cgdGhlIHByb2dyZXNzIG1ldGVyLgoKRGFuaWVsICgyMiBBcHJpbCAyMDA1KQotIERhdmUgRHJpYmluJ3MgTVNWQyBtYWtlZmlsZSBmaXg6IHNldCBDVVJMX1NUQVRJQ0xJQiB3aGVuIGl0IGJ1aWxkcyBzdGF0aWMKICBsaWJyYXJ5IHZhcmlhbnRzLgoKLSBBbmRyZXMgR2FyY2lhIGZpeGVkIGNvbmZpZ3VyZSB0byBzZXQgdGhlIHByb3BlciBkZWZpbmUgd2hlbiBidWlsZGluZyBzdGF0aWMKICBsaWJjdXJsIG9uIHdpbmRvd3MuCgotIC0tcmV0cnktZGVsYXkgZGlkbid0IHdvcmsuCgpEYW5pZWwgKDE4IEFwcmlsIDIwMDUpCi0gT2xpdmllciByZXBvcnRlZCB0aGF0IGV2ZW4gdGhvdWdoIGhlIHVzZWQgQ1VSTE9QVF9QT1JULCBsaWJjdXJsIGNsZWFybHkKICBzdGlsbCB1c2VkIHRoZSBkZWZhdWx0IHBvcnQuIEhlIHdhcyByaWdodC4gSSBmaXhlZCB0aGUgcHJvYmxlbSBhbmQgYWRkZWQgdGhlCiAgdGVzdCBjYXNlcyA1MjEsIDUyMiBhbmQgNTIzIHRvIHZlcmlmeSB0aGUgZml4LgoKLSBUb3NoaXl1a2kgTWFlemF3YSByZXBvcnRlZCB0aGF0IHdoZW4gZG9pbmcgYSBQT1NUIHdpdGggYSByZWFkIGNhbGxiYWNrLAogIGxpYmN1cmwgZGlkbid0IHByb3Blcmx5IHNlbmQgYW4gRXhwZWN0OiAxMDAtY29udGludWUgaGVhZGVyLiBJdCBkb2VzIG5vdy4KCi0gSSBjb21taXR0ZWQgYnkgbWlnIGNoYW5nZSBpbiB0aGUgdGVzdCBzdWl0ZSdzIEZUUCBzZXJ2ZXIgdGhhdCBtb3ZlcyBvdXQgYWxsCiAgc29ja2V0L1RDUCBjb2RlIHRvIGEgc2VwYXJhdGUgQyBwcm9ncmFtIG5hbWVkIHNvY2tmaWx0LiBBbmQgYWRkZWQgNCBuZXcKICB0ZXN0IGNhc2VzIGZvciBGVFAgb3ZlciBJUHY2LgoKRGFuaWVsICg4IEFwcmlsIDIwMDUpCi0gQ29yeSBOZWxzb24gcmVwb3J0ZWQgYSBwcm9ibGVtIHdpdGggYSBIVFRQIHNlcnZlciB0aGF0IHJlc3BvbmRlZCB3aXRoIGEgMzA0CiAgcmVzcG9uc2UgY29udGFpbmluZyBhbiAiaWxsZWdhbCIgQ29udGVudC1MZW5ndGg6IGhlYWRlciwgd2hpY2ggd2FzIG5vdAogIHByb3Blcmx5IGlnbm9yZWQgYnkgbGliY3VybC4gTm93IGl0IGlzLiBUZXN0IGNhc2UgMjQ5IHZlcmlmaWVzLgoKRGFuaWVsICg3IEFwcmlsIDIwMDUpCi0gQWRkZWQgYWJpbGl0eSB0byBidWlsZCBhbmQgcnVuIHdpdGggR251VExTIGFzIGFuIGFsdGVybmF0aXZlIHRvIE9wZW5TU0wgZm9yCiAgdGhlIHNlY3VyZSBsYXllci4gY29uZmlndXJlIC0td2l0aC1nbnV0bHMgZW5hYmxlcyB3aXRoLiBOb3RlIHRoYXQgdGhlCiAgcHJldmlvdXMgT3BlblNTTCBjaGVjayBzdGlsbCBoYXMgcHJlZmVyZW5jZSBhbmQgaWYgaXQgZmlyc3QgZGV0ZWN0cyBPcGVuU1NMLAogIGl0IHdpbGwgbm90IGNoZWNrIGZvciBHbnVUTFMuIFlvdSBtYXkgbmVlZCB0byBleHBsaWN0bHkgZGlhYmxlIE9wZW5TU0wgd2l0aAogIC0td2l0aG91dC1zc2wuCgogIFRoaXMgd29yayBoYXMgYmVlbiBzcG9uc29yZWQgYnkgVGhlIFdyaXR0ZW4gV29yZC4KCkRhbmllbCAoNSBBcHJpbCAyMDA1KQotIENocmlzdG9waGUgTGVncnkgZml4ZWQgdGhlIHBvc3QtdXBsb2FkIGNoZWNrIGZvciBGVFAgdG8gbm90IGNvbXBsYWluIGlmIHRoZQogIHVwbG9hZCB3YXMgc2tpcHBlZCBkdWUgdG8gYSB0aW1lLWNvbmRpdGlvbiBhcyBzZXQgd2l0aAogIENVUkxPUFRfVElNRUNPTkRJVElPTi4gSSBhZGRlZCB0ZXN0IGNhc2UgMjQ3IGFuZCAyNDggdG8gdmVyaWZ5LgoKVmVyc2lvbiA3LjEzLjIgKDUgQXByaWwgMjAwNSkKCkRhbmllbCAoNCBBcHJpbCAyMDA1KQotIE1hcmNlbG8gSnVjaGVtIGZpeGVkIHRoZSBNU1ZDIG1ha2VmaWxlIGZvciBsaWJjdXJsCgotIEdpc2xlIFZhbmVtIGZpeGVkIGEgY3Jhc2ggaW4gbGliY3VybCwgdGhhdCBjb3VsZCBoYXBwZW4gaWYgdGhlIGVhc3kgaGFuZGxlCiAgd2FzIGtpbGxlZCBiZWZvcmUgdGhlIHRocmVhZGluZyByZXNvbHZlciAod2luZG93cyBvbmx5KSBzdGlsbCBoYWRuJ3QKICBjb21wbGV0ZWQuCgotIEhhcmRlZXAgU2luZ2ggcmVwb3J0ZWQgYSBwcm9ibGVtIGRvaW5nIEhUVFAgUE9TVCB3aXRoIERpZ2VzdC4gKEl0IHdhcwogIGFjdHVhbGx5IGFsc28gYWZmZWN0aW5nIE5UTE0gYW5kIE5lZ290aWF0ZS4pIEl0IHR1cm5lZCBvdXQgdGhhdCBpZiB0aGUKICBzZXJ2ZXIgcmVzcG9uZGVkIHdpdGggMTAwIENvbnRpbnVlIGJlZm9yZSB0aGUgaW5pdGlhbCA0MDEgcmVzcG9uc2UsIGxpYmN1cmwKICBkaWRuJ3QgdGFrZSBjYXJlIG9mIHRoZSByZXNwb25zZSBwcm9wZXJseS4gVGVzdCBjYXNlIDI0NSBhbmQgMjQ2IGFkZGVkIHRvCiAgdmVyaWZ5IHRoaXMuCgpEYW5pZWwgKDMwIE1hcmNoIDIwMDUpCi0gQW5kcmVzIEdhcmNpYSBtb2RpZmllZCB0aGUgY29uZmlndXJlIHNjcmlwdCB0byBjaGVjayBmb3IgbGliZ2RpMzIgYmVmb3JlCiAgbGliY3J5cHRvLCB0byBtYWtlIHRoZSBTU0wgY2hlY2sgd29yayBmaW5lIG9uIG1zeXMvbWluZ3cuCgpEYW5pZWwgKDI5IE1hcmNoIDIwMDUpCi0gVG9tIE1vZXJzIGlkZW50aWZpZWQgYSBmbGF3IHdoZW4geW91IHNlbnQgYSBQT1NUIHdpdGggRGlnZXN0IGF1dGhlbnRpY2F0aW9uLAogIGFzIGluIHRoZSBmaXJzdCByZXF1ZXN0IHdoZW4gY3VybCBzZW5kcyBhIFBPU1Qgd2l0aCBDb250ZW50LUxlbmd0aDogMCwgaXQKICBzdGlsbCBmb3JjaWJseSBjbG9zZWQgdGhlIGNvbm5lY3Rpb24gYmVmb3JlIGRvaW5nIHRoZSBuZXh0IHN0ZXAgaW4gdGhlIGF1dGgKICBuZWdvdGlhdGlvbi4KCi0gSmVzcGVyIEplbnNlbiBmb3VuZCBvdXQgdGhhdCBGVFAtU1NMIGRpZG4ndCB3b3JrIHNpbmNlIG15IEZUUAogIHJld3JpdGUuIEZpeGluZyB0aGF0IHdhcyBlYXN5LCBidXQgaXQgYWxzbyByZXZlYWxlZCBhIG11Y2ggd29yc2UgcHJvYmxlbToKICB0aGUgRlRQIHNlcnZlciByZXNwb25zZSByZWFkZXIgZnVuY3Rpb24gZGlkbid0IHByb3Blcmx5IGRlYWwgd2l0aCByZWFkaW5nCiAgcmVzcG9uc2VzIGluIG11bHRpcGxlIHRpbnkgY2h1bmtzIHByb3Blcmx5ISBJIG1vZGlmaWVkIHRoZSBGVFAgc2VydmVyIHRvCiAgYWxsb3cgaXQgdG8gcHJvZHVjZSBzdWNoIHNwbGl0LXVwIHJlc3BvbnNlcyB0byBtYWtlIHN1cmUgY3VybCBkZWFscyB3aXRoCiAgdGhlbSBhcyBpdCBzaG91bGQuCgotIEJhc2VkIG9uIEF1Z3VzdHVzIFNhdW5kZXJzJyBjb21tZW50cyBhbmQgZmluZGluZ3MsIHRoZSBIVFRQIG91dHB1dCBhdXRoCiAgZnVuY3Rpb24gd2FzIGZpeGVkIHRvIHVzZSB0aGUgcHJvcGVyIHByb3h5IGF1dGhlbnRpY2F0aW9uIHdoZW4gbXVsdGlwbGUgb25lcwogIGFyZSBhY2NlcHRlZC4gdGVzdCAyMzkgYW5kIHRlc3QgMjQzIHdlcmUgYWRkZWQgdG8gcmVwZWF0IHRoZSBwcm9ibGVtcyBhbmQKICB2ZXJpZnkgdGhlIGZpeGVzLgoKICAtLXByb3h5LWFueWF1dGggd2FzIGFkZGVkIHRvIHRoZSBjdXJsIHRvb2wKCkRhbmllbCAoMTYgTWFyY2ggMjAwNSkKLSBUcnU2NCBhbmQgc29tZSBJUklYIGJveGVzIHNlZW0gdG8gbm90IGxpa2UgdGVzdCAyMzcgYXMgaXQgaXMuIFRoZWlyCiAgaW5ldF9hZGRyKCkgZnVuY3Rpb25zIHNlZW1zIHRvIHVzZSAmMjU1IG9uIGFsbCBudW1lcmljYWxzIGluIGEgaXB2NCBkb3R0ZWQKICBhZGRyZXNzIHdoaWNoIG1ha2VzIGEgZGlmZmVyZW50IGZhaWx1cmUuLi4gTm93IEkndmUgbW9kaWZpZWQgdGhlIGlwdjQKICByZXNvbHZlIGNvZGUgdG8gdXNlIGluZXRfcHRvbigpIGluc3RlYWQgaW4gYW4gYXR0ZW1wdCB0byBtYWtlIHRoZXNlIHN5c3RlbXMKICBiZXR0ZXIgZGV0ZWN0IHRoaXMgYXMgYSBiYWQgSVAgYWRkcmVzcyByYXRoZXIgdGhhbiBjcmVhdGluZyBhIHRvYWxseSBib2d1cwogIGFkZHJlc3MgdGhhdCBpcyB0aGVuIHBhc3NlZCBvbiBhbmQgdXNlZC4KCkRhbmllbCAoMTUgTWFyY2ggMjAwNSkKLSBEYW4gRmFuZHJpY2ggbWFkZSB0aGUgY29kZSBwcm9wZXJseSB1c2UgdGhlIHVDbGliYydzIHZlcnNpb24gb2YKICBpbmV0X250b2FfcigpIHdoZW4gYnVpbHQgd2l0aCBpdC4KCi0gQWRkZWQgdGVzdCAyMzcgYW5kIDIzODogdGVzdCBFUFNWIGFuZCBQQVNWIHJlc3BvbnNlIGhhbmRsaW5nIHdoZW4gdGhleSBnZXQKICB3ZWxsLSBmb3JtYXRlZCBkYXRhIGJhY2sgYnV0IHVzaW5nIGlsbGVnYWwgdmFsdWVzLiBJbiAyMzcgUEFTViBnZXRzIGFuIElQCiAgYWRkcmVzcyB0aGF0IGlzIHdheSBiYWQuIEluIDIzOCBFUFNWIGdldHMgYSBwb3J0IHRoYXQgaXMgd2F5IG91dCBvZiByYW5nZS4KCkRhbmllbCAoMTQgTWFyY2ggMjAwNSkKLSBBZGRlZCBhIGZldyBtaXNzaW5nIGZlYXR1cmVzIHRvIHRoZSBjdXJsLWNvbmZpZyAtLWZlYXR1cmVzIGxpc3QKCi0gTW9kaWZpZWQgdGVzdGN1cmwucGwgdG8gbm93IG9mZmVyCiAgMSAtIGNvbW1hbmQgbGluZSBvcHRpb25zIGZvciBhbGwgaW5mbyBpdCBwcmV2aW91c2x5IG9ubHkgcmVhZCBmcm9tCiAgICAgIGZpbGU6IC0tbmFtZSwgLS1lbWFpbCwgLS1kZXNjIGFuZCAtLWNvbmZpZ3VyZQogIDIgLSAtLW5vY3ZzdXAgbWFrZXMgaXQgbm90IGF0dGVtcHQgdG8gZG8gY3ZzIHVwZGF0ZQogIDMgLSAtLWNyb3NzY29tcGlsZSBpbmZvcm1zIGl0IGFuZCBtYWtlcyBpdCBub3QgYXR0ZW1wdCB0aGluZ3MgaXQgY2FuJ3QgZG8KCi0gRml4ZWQgbnVtZXJvdXMgd2luMzIgY29tcGlsZXIgd2FybmluZ3MuCgotIFJlbW92ZWQgdGhlIGxpYi9zZWN1cml0eS5oIGZpbGUgc2luY2UgaXQgc2hhZG93ZWQgdGhlIG1pbmd3L3dpbjMyIGhlYWRlcgogIHdpdGggdGhlIHNhbWUgbmFtZSB3aGljaCBpcyBuZWVkZWQgZm9yIFNTUEkgYnVpbGRzLiBUaGUgY29udGVudHMgb2YgdGhlCiAgZm9ybWVyIHNlY3VyaXR5LmggaXMgbm93IGkga3JiNC5oCgotIGNvbmZpZ3VyZSAtLWVuYWJsZS1zc3BpIG5vdyBlbmFibGVzIFNTUEkgaW4gdGhlIGJ1aWxkLiBJdCBvbmx5IHdvcmtzIGZvcgogIHdpbmRvd3MgYnVpbGRzIChpbmNsdWRpbmcgY3Jvc3MtY29tcGlsZXMgZm9yIHdpbmRvd3MpLgoKRGFuaWVsICgxMiBNYXJjaCAyMDA1KQotIERhdmlkIEhvdWxkZXIgYWRkZWQgLS1mb3JtLXN0cmluZyB0aGF0IGFkZHMgdGhhdCBzdHJpbmcgdG8gYSBtdWx0aXBhcnQKICBmb3JtcG9zdCBwYXJ0LCB3aXRob3V0IHNwZWNpYWwgY2hhcmFjdGVycyBoYXZpbmcgc3BlY2lhbCBtZWFuaW5ncyBldGMgbGlrZQogIC0tZm9ybSBmZWF0dXJlcy4KCkRhbmllbCAoMTEgTWFyY2ggMjAwNSkKLSBjdXJsX3ZlcnNpb25faW5mbygpIHJldHVybnMgdGhlIGZlYXR1cmUgYml0IENVUkxfVkVSU0lPTl9TU1BJIGlmIGl0IHdhcwogIGJ1aWx0IHdpdGggU1NQSSBzdXBwb3J0LgoKLSBDaHJpc3RvcGhlciBSLiBQYWxtZXIgbWFkZSBpdCBwb3NzaWJsZSB0byBidWlsZCBsaWJjdXJsIHdpdGggdGhlCiAgVVNFX1dJTkRPV1NfU1NQSSBvbiBXaW5kb3dzLCBhbmQgdGhlbiBsaWJjdXJsIHdpbGwgYmUgYnVpbHQgdG8gdXNlIHRoZQogIG5hdGl2ZSB3YXkgdG8gZG8gTlRMTS4gU1NQSSBhbHNvIGFsbG93cyBsaWJjdXJsIHRvIHBhc3Mgb24gdGhlIGN1cnJlbnQgdXNlcgogIGFuZCBpdHMgcGFzc3dvcmQgaW4gdGhlIHJlcXVlc3QuCgpEYW5pZWwgKDkgTWFyY2ggMjAwNSkKLSBEYW4gRiBpbXByb3ZlZCB0aGUgU1NMIGxpYiBzZXR1cCBpbiBjb25maWd1cmUuCgotIE5vZGFrIFNvZGFrIHJlcG9ydGVkIGEgY3Jhc2ggd2hlbiB1c2luZyBhIFNPQ0tTNCBwcm94eS4KCi0gSmVhbi1NYXJjIFJhbmdlciBwb2ludGVkIG91dCBhbiBlbWJhcmFzc2luZyBkZWJ1ZyBwcmludGYoKSBsZWZ0b3ZlciBpbiB0aGUKICBtdWx0aSBpbnRlcmZhY2UgY29kZS4KCi0gQWRqdXN0ZWQgdGhlIG1hbiBwYWdlIGZvciB0aGUgY3VybF9nZXRkYXRlKCkgcmV0dXJuIHZhbHVlIGZvciBkYXRlcyBhZnRlcgogIHllYXIgMjAzOC4gRm9yIDMyIGJpdCB0aW1lX3QgaXQgcmV0dXJucyAweDdmZmZmZmZmIGJ1dCBmb3IgNjRiaXQgdGltZV90IGl0CiAgcmV0dXJucyBlaXRoZXIgdGhlIGNvcnJlY3QgdmFsdWUgb3IgZXZlbiAtMSBvbiBzb21lIHN5c3RlbXMgdGhhdCBzdGlsbCBzZWVtCiAgdG8gbm90IGRlYWwgd2l0aCB0aGlzIHByb3Blcmx5LiBUb3IgQXJudHNlbiBmb3VuZCBhIDY0Yml0IEFJWCBzeXN0ZW0gZm9yIHVzCiAgdGhhdCBkaWQgdGhlIGxhdHRlci4gR3dlbm9sZSBCZWF1Y2hlc25lJ3MgTWFuZHJha2UgcGF0Y2ggcHV0IHRoZSBsaWdodHMgb24KICB0aGlzIHByb2JsZW0gaW4gdGhlIGZpcnN0IHBsYWNlLgoKRGFuaWVsICg4IE1hcmNoIDIwMDUpCi0gRG9taW5pY2sgTWVnbGlvIHJlcG9ydGVkIHRoYXQgdXNpbmcgQ1VSTE9QVF9GSUxFVElNRSB3aGVuIHRyYW5zZmVycmluZyBhIEZUUAogIGZpbGUgZ290IGEgTGFzdC1Nb2RpZmllZDogaGVhZGVyIHdyaXR0ZW4gdG8gdGhlIGRhdGEgc3RyZWFtLCBjb3JydXB0aW5nIHRoZQogIGFjdHVhbCBkYXRhLiBUaGlzIHdhcyBiZWNhdXNlIHNvbWUgY29uZGl0aW9ucyBmcm9tIHRoZSBwcmV2aW91cyBGVFAgY29kZSB3YXMKICBub3QgcHJvcGVybHkgYnJvdWdodCBpbnRvIHRoZSBuZXcgRlRQIGNvZGUuIEkgZml4ZWQgYW5kIEkgYWRkZWQgdGVzdCBjYXNlCiAgNTIwIHRvIHZlcmlmeS4gKFRoaXMgYnVnIHdhcyBpbnRyb2R1Y2VkIGluIDcuMTMuMSkKCi0gRGFuIEZhbmRyaWNoIGZpeGVkIHRoZSBjb25maWd1cmUgLS13aXRoLXpsaWIgb3B0aW9uIHRvIGFsd2F5cyBjb25zaWRlciB0aGUKICBnaXZlbiBwYXRoIGJlZm9yZSBhbnkgc3RhbmRhcmQgcGF0aHMuCgpEYW5pZWwgKDYgTWFyY2ggMjAwNSkKLSBSYW5keSBNY011cmNoeSB3YXMgdGhlIGZpcnN0IHRvIHJlcG9ydCB0aGF0IHZhbGdyaW5kLnBtIHdhcyBtaXNzaW5nIGZyb20gdGhlCiAgcmVsZWFzZSBhcmNoaXZlIGFuZCB0aHVzICdtYWtlIHRlc3QnIGZhaWxzLgoKRGFuaWVsICg1IE1hcmNoIDIwMDUpCi0gRGFuIEZhbmRyaWNoIGFkZGVkIEhBVkVfRlRSVU5DQVRFIHRvIHNldmVyYWwgY29uZmlnLSouaCBmaWxlcy4KCi0gQWRkZWQgdGVzdCBjYXNlIDIzNSB0aGF0IG1ha2VzIGEgcmVzdW1lZCB1cGxvYWQgb2YgYSBmaWxlIHRoYXQgaXNuJ3QgcHJlc2VudAogIG9uIHRoZSByZW1vdGUgc2lkZS4gVGhpcyB0aGVuIGNvbnZlcnRzIHRoZSBvcGVyYXRpb24gdG8gYW4gb3JkaW5hcnkgU1RPUgogIHVwbG9hZC4gVGhpcyB3YXMgcmVxdWVzdGVkL3BvaW50ZWQgb3V0IGJ5IElnbmFjaW8gVmF6cXVlei1BYnJhbXMuCgogIEl0IGFsc28gcHJvdmVkIChhbmQgSSBmaXhlZCkgYSBidWcgaW4gdGhlIG5ld2x5IHJld3JpdHRlbiBmdHAgY29kZSAoYW5kCiAgcHJlc2VudCBpbiB0aGUgNy4xMy4xIHJlbGVhc2UpIHdoZW4gdHJ5aW5nIHRvIHJlc3VtZSBhbiB1cGxvYWQgYW5kIHRoZQogIHNlcnZlcnMgcmV0dXJucyBhbiBlcnJvciB0byB0aGUgU0laRSBjb21tYW5kLiBsaWJjdXJsIHRoZW4gbG9vcHMgYW5kIHNlbmRzCiAgU0laRSBjb21tYW5kcyBpbmZpbml0ZWx5LgoKLSBEYW4gRmFuZHJpY2ggZml4ZWQgYSBTU0wgcHJvYmxlbSBpbnRyb2R1Y2VkIG9uIEZlYnJ1YXJ5IDl0aCB0aGF0IG1hZGUKICBsaWJjdXJsIGF0dGVtcHQgdG8gbG9hZCB0aGUgd2hvbGUgcmFuZG9tIGZpbGUgdG8gc2VlZCB0aGUgUFJORy4gVGhpcyBpcwogIHJlYWxseSBiYWQgc2luY2UgdGhpcyB0dXJucyBvdXQgdG8gYmUgdXNpbmcgL2Rldi91cmFuZG9tIGF0IHRpbWVzLi4uCgpWZXJzaW9uIDcuMTMuMSAoNCBNYXJjaCAyMDA1KQoKRGFuaWVsICg0IE1hcmNoIDIwMDUpCi0gRGF2ZSBEcmliaW4gbWFkZSBpdCBwb3NzaWJsZSB0byBzZXQgQ1VSTE9QVF9DT09LSUVGSUxFIHRvICIiIHRvIGFjdGl2YXRlCiAgdGhlIGNvb2tpZSAiZW5naW5lIiB3aXRob3V0IGhhdmluZyB0byBwcm92aWRlIGFuIGVtcHR5IG9yIG5vbi1leGlzdGluZyBmaWxlLgoKLSBSZW5lIFJlYmUgZml4ZWQgYSAtIyBjcmFzaCB3aGVuIG1vcmUgZGF0YSB0aGFuIGV4cGVjdGVkIHdhcyByZXRyaWV2ZWQuCgpEYW5pZWwgKDIyIEZlYnJ1YXJ5IDIwMDUpCi0gTlRMTSBhbmQgZnRwLWtyYjQgYnVmZmVyIG92ZXJmbG93IGZpeGVkLCBhcyByZXBvcnRlZCBoZXJlOgogIGh0dHA6Ly93d3cuc2VjdXJpdHlmb2N1cy5jb20vYXJjaGl2ZS8xLzM5MTA0MiBhbmQgdGhlIENBTiByZXBvcnQgaGVyZToKICBodHRwOi8vY3ZlLm1pdHJlLm9yZy9jZ2ktYmluL2N2ZW5hbWUuY2dpP25hbWU9Q0FOLTIwMDUtMDQ5MAoKICBJZiB0aGVzZSBzZWN1cml0eSBndXlzIHdlcmUgc2VyaW91cywgd2UnZCBiZWVuIG5vdGlmaWVkIGluIGFkdmFuY2UgYW5kIHdlCiAgY291bGQndmUgc2F2ZWQgYSBmZXcgb2YgeW91IGEgbGl0dGxlIHN1cnByaXNlLCBidXQgbm93IHdlIHdlcmVuJ3QuCgpEYW5pZWwgKDE5IEZlYnJ1YXJ5IDIwMDUpCi0gUmFscGggTWl0Y2hlbGwgcmVwb3J0ZWQgYSBmbGF3IHdoZW4geW91IHVzZWQgYSBwcm94eSB3aXRoIGF1dGgsIGFuZCB5b3UKICByZXF1ZXN0ZWQgZGF0YSBmcm9tIGEgaG9zdCBhbmQgdGhlbiBmb2xsb3dlZCBhIHJlZGlyZWN0IHRvIGFub3RoZXIKICBob3N0LiBsaWJjdXJsIHRoZW4gZGlkbid0IHVzZSB0aGUgcHJveHktYXV0aCBwcm9wZXJseSBpbiB0aGUgc2Vjb25kIHJlcXVlc3QsCiAgZHVlIHRvIHRoZSBob3N0LW9ubHkgY2hlY2sgZm9yIG9yaWdpbmFsIGhvc3QgbmFtZSB3cm9uZ2x5IGJlaW5nIGV4dGVuZGVkIHRvCiAgdGhlIHByb3h5IGF1dGggYXMgd2VsbC4gQWRkZWQgdGVzdCBjYXNlIDIzMyB0byB2ZXJpZnkgdGhlIGZsYXcgYW5kIHRoYXQgdGhlCiAgZml4IHJlbW92ZWQgdGhlIHByb2JsZW0uCgpEYW5pZWwgKDE4IEZlYnJ1YXJ5IDIwMDUpCi0gTWlrZSBEb2JicyByZXBvcnRlZCBhIG1pbmd3IGJ1aWxkIGZhaWx1cmUgZHVlIHRvIHRoZSBsYWNrIG9mCiAgQlVJTERJTkdfTElCQ1VSTCBiZWluZyBkZWZpbmVkIHdoZW4gbGliY3VybCBpcyBidWlsdC4gTm93IHRoaXMgaXMgZGVmaW5lZCBieQogIGNvbmZpZ3VyZSB3aGVuIG1pbmd3IGlzIHVzZWQuCgpEYW5pZWwgKDE3IEZlYnJ1YXJ5IDIwMDUpCi0gRGF2aWQgaW4gYnVnIHJlcG9ydCAjMTEyNDU4OCBmb3VuZCBhbmQgZml4ZWQgYSBzb2NrZXQgbGVhayB3aGVuIGxpYmN1cmwKICBkaWRuJ3QgY2xvc2UgdGhlIHNvY2tldCBwcm9wZXJseSB3aGVuIHJldHVybmluZyBlcnJvciBkdWUgdG8gZmFpbGluZwogIGxvY2FsYmluZAoKRGFuaWVsICgxNiBGZWJydWFyeSAyMDA1KQotIENocmlzdG9waGVyIFIuIFBhbG1lciByZXBvcnRlZCBhIHByb2JsZW0gd2l0aCBIVFRQLVBPU1RpbmcgdXNpbmcgImFueWF1dGgiCiAgdGhhdCBwaWNrcyBOVExNLiBUaGFua3MgdG8gRGF2aWQgQnlyb24gbGV0dGluZyBtZSB0ZXN0IE5UTE0gYWdhaW5zdCBoaXMKICBzZXJ2ZXJzLCBJIGNvdWxkIHF1aWNrbHkgcmVwZWF0IGFuZCBmaXggdGhlIHByb2JsZW0uIEl0IHR1cm5lZCBvdXQgdG8gYmU6CgogIFdoZW4gbGliY3VybCBQT1NUcyB3aXRob3V0IGtub3dpbmcvdXNpbmcgYW4gYXV0aGVudGljYXRpb24gYW5kIGl0IGdldHMgYmFjawogIGEgbGlzdCBvZiB0eXBlcyBmcm9tIHdoaWNoIGl0IHBpY2tzIE5UTE0sIGl0IG5lZWRzIHRvIGVpdGhlciBjb250aW51ZQogIHNlbmRpbmcgaXRzIGRhdGEgaWYgaXQga2VlcHMgdGhlIGNvbm5lY3Rpb24gYWxpdmUsIG9yIG5vdCBzZW5kIHRoZSBkYXRhIGJ1dAogIGNsb3NlIHRoZSBjb25uZWN0aW9uLiBUaGVuIGRvIHRoZSBmaXJzdCBzdGVwIGluIHRoZSBOVExNIGF1dGguIGxpYmN1cmwKICBkaWRuJ3Qgc2VuZCB0aGUgZGF0YSBub3IgY2xvc2UgdGhlIGNvbm5lY3Rpb24gYnV0IHNpbXBseSByZWFkIHRoZQogIHJlc3BvbnNlLWJvZHkgYW5kIHRoZW4gc2VudCB0aGUgZmlyc3QgbmVnb3RpYXRpb24gc3RlcC4gV2hpY2ggdGhlbiBmYWlsZWQKICBtaXNlcmFibHkgb2YgY291cnNlLiBUaGUgZml4ZWQgdmVyc2lvbiBmb3JjZXMgYSBjb25uZWN0aW9uIGlmIHRoZXJlIGlzIG1vcmUKICB0aGFuIDIwMDAgYnl0ZXMgbGVmdCB0byBzZW5kLgoKRGFuaWVsICgxNCBGZWJydWFyeSAyMDA1KQotIFRoZSBjb25maWd1cmUgc2NyaXB0IGRpZG4ndCBjaGVjayBmb3IgRU5HSU5FX2xvYWRfYnVpbHRpbl9lbmdpbmVzKCkgc28gaXQKICB3YXMgbmV2ZXIgdXNlZC4KCkRhbmllbCAoMTEgRmVicnVhcnkgMjAwNSkKLSBSZW1vdmVkIGFsbCB1c2VzIG9mIHN0cmZ0aW1lKCkgc2luY2UgaXQgdXNlcyB0aGUgbG9jYWxpc2VkIHZlcnNpb24gb2YgdGhlCiAgd2VlayBkYXkgbmFtZXMgYW5kIG1vbnRoIG5hbWVzIGFuZCBzZXJ2ZXJzIGRvbid0IGxpa2UgdGhhdC4KCkRhbmllbCAoMTAgRmVicnVhcnkgMjAwNSkKLSBOb3cgdGhlIHRlc3Qgc2NyaXB0IGRpc2FibGVzIHZhbGdyaW5kLXRlc3Rpbmcgd2hlbiB0aGUgdGVzdCBzdWl0ZSBydW5zIGlmCiAgbGliY3VybCBpcyBidWlsdCBzaGFyZWQuIE90aGVyd2lzZSB2YWxncmluZCBvbmx5IHRlc3RzIHRoZSBzaGVsbCB0aGF0IHJ1bnMKICB0aGUgd3JhcHBlci1zY3JpcHQgbmFtZWQgJ2N1cmwnIHRoYXQgaXMgYSBmcm9udC1lbmQgdG8gY3VybCBpbiB0aGlzIGNhc2UuCiAgVGhpcyBzaG91bGQgYWxzbyBmaXggdGhlIGh1Z2UgYW1vdW50IG9mIHJlcG9ydHMgb2YgZmFsc2UgcG9zaXRpdmVzIHdoZW4KICB2YWxncmluZCBoYXMgaWRlbnRpZmllZCBsZWFrcyBpbiAoYmEpc2ggYW5kIG5vdCBpbiBjdXJsIGFuZCBwZW9wbGUgcmVwb3J0CiAgdGhhdCBhcyBjdXJsIGJ1Z3MuIEJ1ZyByZXBvcnQgIzExMTY2NzIgaXMgb25lIGV4YW1wbGUuCgogIEFsc28sIHRoZSB2YWxncmluZCByZXBvcnQgcGFyc2VyIGhhcyBiZWVuIGFkYXB0ZWQgdG8gY2hlY2sgdGhhdCBhdCBsZWFzdCBvbmUKICBvZiB0aGUgc291cmNlcyBpbiBhIHN0YWNrIHN0cmFjZSBpcyBvbmUgb2YgKGxpYiljdXJsJ3Mgc291cmNlIGZpbGVzIG9yCiAgb3RoZXJ3aXNlIGl0IHdpbGwgbm90IGNvbnNpZGVyIHRoZSBwcm9ibGVtIHRvIGNvbmNlcm4gKGxpYiljdXJsLgoKLSBNYXJ0eSBLdWhydCBzdHJlYW1saW5lZCB0aGUgVk1TIGJ1aWxkLgoKRGFuaWVsICg5IEZlYnJ1YXJ5IDIwMDUpCi0gRGF2aWQgQnlyb24gZml4ZWQgaGlzIFNTTCBwcm9ibGVtcywgaW5pdGlhbGx5IG1lbnRpb25lZCBoZXJlOgogIGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9saWItMjAwNS0wMS8wMjQwLmh0bWwuIEl0IHR1cm5lZCBvdXQgd2UgZGlkbid0IHVzZQogIFNTTF9wZW5kaW5nKCkgYXMgd2Ugc2hvdWxkLgoKLSBDb252ZXJ0ZWQgbG90cyBvZiBGVFAgY29kZSB0byBhIHN0YXRlbWFjaGluZSwgc28gdGhhdCB0aGUgbXVsdGkgaW50ZXJmYWNlCiAgZG9lc24ndCBibG9jayB3aGlsZSBjb21tdW5pY2F0aW5nIGNvbW1hbmRzLXJlc3BvbnNlcyB3aXRoIGFuIEZUUCBzZXJ2ZXIuCgogIEkndmUgYWRkZWQgYSBjb21tZW50IGxpa2UgQkxPQ0tJTkcgaW4gdGhlIGNvZGUgb24gYWxsIHNwb3RzIEkgY291bGQgZmluZAogIHdoZXJlIHdlIHN0aWxsIGhhdmUgYmxvY2tpbmcgb3BlcmF0aW9ucy4gV2hlbiB3ZSBjaGFuZ2UgY3VybF9lYXN5X3BlcmZvcm0oKQogIHRvIHVzZSB0aGUgbXVsdGkgaW50ZXJmYWNlLCB3ZSdsbCBhbHNvIGJlIGFibGUgdG8gc2ltcGxpZnkgdGhlIGNvZGUgc2luY2UKICB0aGVyZSB3aWxsIG9ubHkgYmUgb25lICJpbnRlcm5hbCBpbnRlcmZhY2UiLgoKICBXaGlsZSBkb2luZyB0aGlzLCBJJ3ZlIG5vdyBtYWRlIENVUkxFX0ZUUF9BQ0NFU1NfREVOSUVEIHNlcGFyYXRlIGZyb20gdGhlCiAgbmV3IENVUkxFX0xPR0lOX0RFTklFRC4gVGhlIGZpcnN0IG9uZSBpcyBub3cgYWNjZXNzIGRlbmllZCB0byBhIGZ1bmN0aW9uLAogIGxpa2UgY2hhbmdpbmcgZGlyZWN0b3J5IG9yIHJldHJpZXZpbmcgYSBmaWxlLCB3aGlsZSB0aGUgc2Vjb25kIG1lYW5zIHRoYXQgd2UKICB3ZXJlIGRlbmllZCBsb2dpbi4KCiAgVGhlIENWUyB0YWcgJ2JlZm9yZV9mdHBfc3RhdGVtYWNoaW5lJyB3YXMgc2V0IGp1c3QgYmVmb3JlIHRoaXMgd2VudCBpbiwgaW4KICBjYXNlIG9mIGZ1dHVyZSBuZWVkLgoKLSBHaXNsZSBtYWRlIHRoZSBESUNUIGNvZGUgc2VuZCBDUkxGIGFuZCBub3QganVzdCBMRiBhcyB0aGUgc3BlYyBzYXlzIHNvLgoKRGFuaWVsICg4IEZlYnJ1YXJ5IDIwMDUpCi0gR2lzbGUgZml4ZWQgcHJvYmxlbXMgd2hlbiBsaWJjdXJsIHJ1bnMgb3V0IG9mIG1lbW9yeSwgYW5kIHdvcmtlZCBvbiBtYWtpbmcKICBzdXJlIHRoZSBwcm9wZXIgZXJyb3IgY29kZSBpcyByZXR1cm5lZCBmb3IgdGhvc2Ugb2NjYXRpb25zLgoKRGFuaWVsICg3IEZlYnJ1YXJ5IDIwMDUpCi0gTWFydWtvIHBvaW50ZWQgb3V0IGEgcHJvYmxlbSB3aXRoIGluZmxhdGUgZGVjb21wcmVzc2luZyBleGFjdGx5IDY0SwogIGNvbnRlbnRzLgoKRGFuaWVsICg1IEZlYnJ1YXJ5IDIwMDUpCi0gRXJpYyBWZXJnbmF1ZCBmb3VuZCBhIHVzZSBvZiBhbiB1bmluaXRpYWxpc2VkIHZhcmlhYmxlIGluIHRoZSBmdHAgd2hlbiBkb2luZwogIFBPUlQgb24gaXB2Ni1lbmFibGVkIGhvc3RzLgoKLSBEYXZpZCBCeXJvbiBwb2ludGVkIG91dCB3ZSBjb3VsZCB1c2UgQlVGU0laRSB0byByZWFkIGRhdGEgKGluCiAgbGliL3RyYW5zZmVyLmMpIGluc3RlYWQgb2YgdXNpbmcgQlVGU0laRSAtMS4KClZlcnNpb24gNy4xMy4wICgxIEZlYnJ1YXJ5IDIwMDUpCgpEYW5pZWwgKDMxIEphbnVhcnkgMjAwNSkKLSBBZGRlZCBMYXJzIE5pbHNzb24ncyBodG1sdGl0bGUuY2MgZXhhbXBsZQoKRGFuaWVsICgzMCBKYW51YXJ5IDIwMDUpCi0gRml4ZWQgYSBtZW1vcnkgbGVhayB3aGVuIHVzaW5nIHRoZSBtdWx0aSBpbnRlcmZhY2UgYW5kIHRoZSBETyBvcGVyYXRpb24KICBmYWlsZWQgKGFzIGluIHRlc3QgY2FzZSAyMDUpLgoKLSBGaXhlZCBhIHZhbGdyaW5kIHdhcm5pbmcgZm9yIGZpbGU6Ly8gb3BlcmF0aW9ucy4KCi0gRml4ZWQgYSB2YWxncmluZCByZXBvcnQgaW4gdGhlIHVybCBnbG9iYmluZyBjb2RlIGZvciB0aGUgY3VybCBjb21tYW5kIGxpbmUKICB0b29sLgoKLSBCdWdmaXhlZCB0aGUgcGFyc2VyIHRoYXQgc2NhbnMgdGhlIHZhbGdyaW5kIHJlcG9ydCBvdXRwdXRzIChpbiBydW50ZXN0cy5wbCkuCiAgSSBub3RpY2VkIHRoYXQgaXQgcHJldmlvdXNseSBkaWRuJ3QgZGV0ZWN0IGFuZCByZXBvcnQgdGhlICJDb25kaXRpb25hbCBqdW1wCiAgb3IgbW92ZSBkZXBlbmRzIG9uIHVuaW5pdGlhbGlzZWQgdmFsdWUocykiIGVycm9yLiBXaGVuIEkgZml4ZWQgdGhpcywgSQogIGNhdWdodCBhIGZldyBjdXJsIGJ1Z3Mgd2l0aCBpdC4gQW5kIHRoZW4gSSBoYWQgdG8gc3BlbmQgdGltZSB0byBtYWtlIHRoZQogIHRlc3Qgc3VpdGUgSUdOT1JFIHRoZXNlIGVycm9ycyB3aGVuIE9wZW5TU0wgaXMgdXNlZCBzaW5jZSBpdCBwcm9kdWNlIG1hc3NpdmUKICBhbW91bnRzIG9mIHZhbGdyaW5kIHdhcm5pbmdzIChidXQgb25seSBvZiB0aGUgIkNvbmRpdGlvbmFsLi4uIiBraW5kIGl0CiAgc2VlbXMpLiBTbywgaWYgYSB0ZXN0IHRoYXQgcmVxdWlyZXMgU1NMIGlzIHJ1biwgaXQgaWdub3JlcyB0aGUKICAiQ29uZGl0aW9uYWwuLi4iIGVycm9ycywgYW5kIHlvdSdsbCBnZXQgYSAidmFsZ3JpbmQgUEFSVElBTCIgb3V0cHV0IGluc3RlYWQKICBvZiAidmFsZ3JpbmQgT0siLgoKRGFuaWVsICgyOSBKYW51YXJ5IDIwMDUpCi0gVXNpbmcgdGhlIG11bHRpIGludGVyZmFjZSwgYW5kIGRvaW5nIGEgcmVxdXN0ZWQgYSByZS11c2VkIGNvbm5lY3Rpb24gdGhhdAogIGdldHMgY2xvc2VkIGp1c3QgYWZ0ZXIgdGhlIHJlcXVlc3QgaGFzIGJlZW4gc2VudCBmYWlsZWQgYW5kIGRpZCBub3QgcmUtaXNzdWUKICBhIHJlcXVlc3Qgb24gYSBmcmVzaCByZWNvbm5lY3QgbGlrZSB0aGUgZWFzeSBpbnRlcmZhY2UgZGlkLiBOb3cgaXQgZG9lcyEKCi0gRGVmaW5lIENVUkxfTVVMVElFQVNZIHdoZW4gYnVpbGRpbmcgbGliY3VybCAobGliL2Vhc3kuYyB0byBiZSBleGFjdCksIHRvIHVzZQogIG15IG5ldyBjdXJsX2Vhc3lfcGVyZm9ybSgpIHRoYXQgdXNlcyB0aGUgbXVsdGkgaW50ZXJmYWNlIHRvIHJ1biB0aGUKICByZXF1ZXN0LiBJdCBpcyBhIGdyZWF0IHRlc3RiZWQgZm9yIHRoZSBtdWx0aSBpbnRlcmZhY2UgYW5kIEkgYmVsaWV2ZSB3ZQogIHNoYWxsIGRvIGl0IHRoaXMgd2F5IGZvciByZWFsIGluIHRoZSBmdXR1cmUgd2hlbiB3ZSBoYXZlIGEgc3VjY2Vzc29yIHRvCiAgY3VybF9tdWx0aV9mZHNldCgpLiBJJ3ZlIHVzZWQgdGhpcyBhcHByb2FjaCB0byBkZXRlY3QgYW5kIGZpeCBzZXZlcmFsIG9mIHRoZQogIHJlY2VudCBtdWx0aS1pbnRlcmZhY2VzIGlzc3Vlcy4KCi0gQWRqdXN0ZWQgdGhlIEtOT1dOX0JVR1MgIzE3IGZpeCBhIGJpdCBtb3JlIHNpbmNlIHRoZSBGVFAgY29kZSBhbHNvIGRpZCBzb21lCiAgYmFkIGFzc3VtcHRpb25zLgoKLSBtdWx0aSBpbnRlcmZhY2U6IHdoZW4gYSByZXF1ZXN0IGlzIGRlbmllZCBkdWUgdG8gIk1heGltdW0gcmVkaXJlY3RzCiAgZm9sbG93ZWQiIGxpYmN1cmwgbGVha2VkIHRoZSBsYXN0IExvY2F0aW9uOiBVUkwuCgotIENvbm5lY3QgZmFpbHVyZXMgd2l0aCB0aGUgbXVsdGkgaW50ZXJmYWNlIHdhcyBvZnRlbiByZXR1cm5lZCBhcyAiY29ubmVjdCgpCiAgdGltZWQgb3V0IiBldmVuIHRob3VnaCB0aGUgcmVhc29uIHdhcyBkaWZmZXJlbnQuCgpEYW5pZWwgKDI4IEphbnVhcnkgMjAwNSkKLSBLTk9XTl9CVUdTICMxNyBmaXhlZC4gQSBETlMgY2FjaGUgZW50cnkgbWF5IG5vdCByZW1haW4gbG9ja2VkIGJldHdlZW4gdHdvCiAgY3VybF9lYXN5X3BlcmZvcm0oKSBpbnZva2VzLiBJdCB3YXMgcHJldmlvdXNseSB1bmxvY2tlZCBhdCBkaXNjb25uZWN0LCB3aGljaAogIGNvdWxkIG1lYW4gdGhhdCBpdCByZW1haW5lZCBsb2NrZWQgYmV0d2VlbiBtdWx0aXBsZSB0cmFuc2ZlcnMuIFRoZSBETlMgY2FjaGUKICBtYXkgbm90IGxpdmUgYXMgbG9uZyBhcyB0aGUgY29ubmVjdGlvbiBjYWNoZSBkb2VzLCBhcyB0aGV5IGFyZSBzZXBhcmF0ZS4KCiAgVG8gZGVhbCB3aXRoIHRoZSBsYWNrIG9mIEROUyAoaG9zdCBhZGRyZXNzKSBkYXRhIGF2YWlsYWJpbGl0eSBpbiByZS11c2VkCiAgY29ubmVjdGlvbnMsIGxpYmN1cmwgbm93IGtlZXBzIGEgY29weSBvZiB0aGUgSVAgYWRyZXNzIGFzIGEgc3RyaW5nLCB0byBiZQogIGFibGUgdG8gc2hvdyBpdCBldmVuIG9uIHN1YnNlcXVlbnQgcmVxdWVzdHMgb24gdGhlIHNhbWUgY29ubmVjdGlvbi4KCiAgVGhlIHByb2JsZW0gY291bGQgYmUgbWFkZSB0byBhcHBlYXIgd2l0aCB0aGlzIHN0dW50OgoKICAxLiBjcmVhdGUgYSBtdWx0aSBoYW5kbGUKICAyLiBhZGQgYW4gZWFzeSBoYW5kbGUKICAzLiBmZXRjaCBhIFVSTCB0aGF0IGlzIHBlcnNpc3RlbnQgKGxlYXZlcyB0aGUgY29ubmVjdGlvbiBhbGl2ZSkKICA0LiByZW1vdmUgdGhlIGVhc3kgaGFuZGxlIGZyb20gdGhlIG11bHRpCiAgNS4ga2lsbCB0aGUgbXVsdGkgaGFuZGxlCiAgNi4gY3JlYXRlIGEgbXVsdGkgaGFuZGxlCiAgNy4gYWRkIHRoZSBzYW1lIGVhc3kgaGFuZGxlIHRvIHRoZSBuZXcgbXVsdGkgaGFuZGxlCiAgOC4gZmV0Y2ggYSBVUkwgZnJvbSB0aGUgc2FtZSBzZXJ2ZXIgYXMgYmVmb3JlIChyZS11c2luZyB0aGUgY29ubmVjdGlvbikKCi0gU3RlcGhlbiBNb3JlIHBvaW50ZWQgb3V0IHRoYXQgQ1VSTE9QVF9GVFBQT1JUIGFuZCB0aGUgLVAgb3B0aW9uIGRpZG4ndCB3b3JrCiAgd2hlbiBidWlsdCBpcHY2LWVuYWJsZWQuIEkndmUgbm93IG1hZGUgYSBmaXggZm9yIGl0LiBXcml0aW5nIHRlc3QgY2FzZXMgZm9yCiAgY3VzdG9tIHBvcnQgaG9zdHMgdHVybmVkIHRvbyB0cmlja3kgc28gdW5mb3J0dW5hdGVseSB0aGVyZSdzIG5vbmUuCgpEYW5pZWwgKDI1IEphbnVhcnkgMjAwNSkKLSBJYW4gRm9yZCBhc2tlZCBhYm91dCBzdXBwb3J0IGZvciB0aGUgRlRQIGNvbW1hbmQgQUNDVCwgYW5kIEkgZGlzY292ZXJlZCBpdAogIGlzIHByZXNlbnQgaW4gUkZDOTU5Li4uIHNvIG5vdyAobGliKWN1cmwgc3VwcG9ydHMgaXQgYXMgd2VsbC4gLS1mdHAtYWNjb3VudAogIGFuZCBDVVJMT1BUX0ZUUF9BQ0NPVU5UIHNldCB0aGUgYWNjb3VudCBzdHJpbmcuIChUaGUgc2VydmVyIG1heSBhc2sgZm9yIGFuCiAgYWNjb3VudCBzdHJpbmcgYWZ0ZXIgUEFTUyBoYXZlIGJlZW4gc2VudCBhd2F5LiBUaGUgY2xpZW50IHJlc3BvbmRzCiAgd2l0aCAiQUNDVCBbYWNjb3VudCBzdHJpbmddIi4pIEFkZGVkIHRlc3QgY2FzZSAyMjggYW5kIDIyOSB0byB2ZXJpZnkgdGhlCiAgZnVuY3Rpb25hbGl0eS4gVXBkYXRlZCB0aGUgdGVzdCBGVFAgc2VydmVyIHRvIHN1cHBvcnQgQUNDVCBzb21ld2hhdC4KCi0gRGF2aWQgU2hhdyBjb250cmlidXRlZCBhIGZhaXJseSBjb21wbGV0ZSBhbmQgZGV0YWlsZWQgYXV0b2NvbmYgdGVzdCB5b3UgY2FuCiAgdXNlIHRvIGRldGVjdCBsaWJjdXJsIGFuZCBzZXR1cCB2YXJpYWJsZXMgZm9yIHRoZSBwcm90b2NvbHMgdGhlIGluc3RhbGxlZAogIGxpYmN1cmwgc3VwcG9ydHM6IGRvY3MvbGliY3VybC9saWJjdXJsLm00CgpEYW5pZWwgKDIxIEphbnVhcnkgMjAwNSkKLSBNYWpvciBGVFAgdGhpcmQgcGFydHkgdHJhbnNmZXIgb3ZlcmhhdWwuCgogIFRoZXNlIGZvdXIgb3B0aW9ucyBhcmUgbm93IG9ic29sZXRlOiBDVVJMT1BUX1NPVVJDRV9IT1NULAogIENVUkxPUFRfU09VUkNFX1BBVEgsIENVUkxPUFRfU09VUkNFX1BPUlQgKHRoaXMgb3B0aW9uIGRpZG4ndCB3b3JrIGJlZm9yZSkKICBhbmQgQ1VSTE9QVF9QQVNWX0hPU1QuCgogIFRoZXNlIHR3byBvcHRpb25zIGFyZSBhZGRlZDogQ1VSTE9QVF9TT1VSQ0VfVVJMIGFuZCBDVVJMT1BUX1NPVVJDRV9RVU9URS4KCiAgVGhlIHRhcmdldC1zaWRlIGRpZG4ndCB1c2UgdGhlIHByb3BlciBwYXRoIHdpdGggUkVUUiwgYW5kIHRodXMgdGhpcyBvbmx5CiAgd29ya2VkIGNvcnJlY3RseSBpbiB0aGUgbG9naW4gcGF0aCAoaS5lIHdpdGhvdXQgZG9pbmcgYW55IENXRCkuIFRoZSBzb3VyY2UtCiAgc2lkZSBzdGlsbCB1c2VzIGEgd3JvbmcgcGF0aCwgYnV0IHRoZSBmaXggZm9yIHRoaXMgd2lsbCBuZWVkIHRvIHdhaXQuIFZlcmlmeQogIHRoZSBmbGF3IGJ5IHVzaW5nIGEgc291cmNlIFVSTCB3aXRoIGluY2x1ZGVkICVYWC1jb2Rlcy4KCiAgTWFkZSBDVVJMT1BUX0ZUUFBPUlQgY29udHJvbCB3ZWF0aGVyIHRoZSB0YXJnZXQgb3BlcmF0aW9uIHNob3VsZCB1c2UgUE9SVAogIChvciBub3QpLiBUaGUgb3RoZXIgc2lkZSB0aHVzIHVzZXMgcGFzc2l2ZSAoUEFTVikgbW9kZS4KCiAgVXBkYXRlZCB0aGUgZnRwM3JkcGFydHkuYyBleGFtcGxlIHNvdXJjZSB0byB1c2UgdGhlIHVwZGF0ZWQgb3B0aW9ucy4KCiAgQWRkZWQgc3VwcG9ydCBmb3IgYSBzZWNvbmQgRlRQIHNlcnZlciBpbiB0aGUgdGVzdCBzdWl0ZS4gTmFtZWQuLi4gZnRwMi4KICBBZGRlZCB0ZXN0IGNhc2VzIDIzMCwgMjMxIGFuZCAyMzIgYXMgYSBmZXcgZmlyc3QgYmFzaWMgdGVzdHMgb2YgdmVyeSBzaW1wbGUKICAzcmQgcGFydHkgdHJhbnNmZXJzLgoKICBDaGFuZ2VkIHRoZSBkZWJ1ZyBvdXRwdXQgdG8gaW5jbHVkZSAndGFyZ2V0JyBhbmQgJ3NvdXJjZScgd2hlbiBhIDNyZCBwYXJ0eQogIGlzIGJlaW5nIG1hZGUsIHRvIG1ha2UgaXQgY2xlYXJlciB3aGF0IGNvbW1hbmRzL3Jlc3BvbnNlcyBjYW1lIG9uIHdoYXQKICBjb25uZWN0aW9uLgoKICBBZGRlZCB0aHJlZSBuZXcgY29tbWFuZCBsaW5lIG9wdGlvbnM6IC0tM3AtdXJsLCAtLTNwLXVzZXIgYW5kIC0tM3AtcXVvdGUuCgogIERvY3VtZW50ZWQgdGhlIGNvbW1hbmQgbGluZSBvcHRpb25zIGFuZCB0aGUgY3VybF9lYXN5X3NldG9wdCBvcHRpb25zIHJlbGF0ZWQKICB0byB0aGlyZCBwYXJ0eSB0cmFuc2ZlcnMuCgogIChUZW1wb3JhcmlseSkgZGlzYWJsZWQgdGhlIGFiaWxpdHkgdG8gcmUtdXNlIGFuIGV4aXN0aW5nIGNvbm5lY3Rpb24gZm9yIHRoZQogIHNvdXJjZSBjb25uZWN0aW9uLiBUaGlzIGlzIGJlY2F1c2UgaXQgbmVlZHMgdG8gZm9yY2UgYSBuZXcgaW4gY2FzZSB0aGUKICBzb3VyY2UgYW5kIHRhcmdldCBpcyB0aGUgc2FtZSBob3N0LCBhbmQgdGhlIGhvc3QgbmFtZSBjaGVjayBpcyB0cmlja2llciBub3cKICB3aGVuIHRoZSBzb3VyY2UgaXMgaWRlbnRpZmllZCB3aXRoIGEgZnVsbCBVUkwgaW5zdGVhZCBvZiBhIHBsYWluIGhvc3QgbmFtZQogIGxpa2UgYmVmb3JlLgoKICBUT0RPIChzaG9ydC10ZXJtKSBmb3IgM3JkIHBhcnR5IHRyYW5zZmVyczogcXVvdGUgc3VwcG9ydC4gVGhlIG9wdGlvbnMgYXJlCiAgdGhlcmUsIHdlIG5lZWQgdG8gYWRkIHRlc3QgY2FzZXMgdG8gdmVyaWZ5IHRoZWlyIGZ1bmN0aW9uYWxpdHkuCgogIFRPRE8gKGxvbmctdGVybSkgZm9yIDNyZCBwYXJ0eSB0cmFuc2ZlcnM6IElQdjYgc3VwcG9ydCAoRVBSVCBhbmQgRVBTViBldGMpCiAgYW5kIFNTTC9UU0wgc3VwcG9ydC4KCkRhbmllbCAoMjAgSmFudWFyeSAyMDA1KQotIFBoaWxpcHBlIEhhbWVhdSBmb3VuZCBvdXQgdGhhdCAtUSAiK1tjb21tYW5kXSIgZGlkbid0IHdvcmssIGFsdGhvdWdoIHNvbWUKICBjb2RlIHdhcyB3cml0dGVuIGZvciBpdC4gSSBmaXhlZCBhbmQgYWRkZWQgdGVzdCBjYXNlIDIyNyB0byB2ZXJpZnkgaXQuCiAgVGhlIGN1cmwuMSBtYW4gcGFnZSBkaWRuJ3QgbWVudGlvbiB0aGUgJysnIHNvIEkgYWRkZWQgaXQuCgpEYW5pZWwgKDE5IEphbnVhcnkgMjAwNSkKLSBTdGVwaGFuIEJlcmdtYW5uIG1hZGUgbGliY3VybCByZXR1cm4gQ1VSTEVfVVJMX01BTEZPUk1BVCBpZiBhbiBGVFAgVVJMCiAgY29udGFpbnMgJTBhIG9yICUwZCBpbiB0aGUgdXNlciwgcGFzc3dvcmQgb3IgQ1dEIHBhcnRzLiAoQSBmdXR1cmUgZml4IHdvdWxkCiAgaW5jbHVkZSBkb2luZyBpdCBmb3IgJTAwIGFzIHdlbGwgLSBzZWUgS05PV05fQlVHUyBmb3IgZGV0YWlscy4pIFRlc3QgY2FzZQogIDIyNSBhbmQgMjI2IHdlcmUgYWRkZWQgdG8gdmVyaWZ5IHRoaXMKCi0gU3RlcGhhbiBCZXJnbWFubiBwb2ludGVkIG91dCB0d28gZmxhd3MgaW4gbGliY3VybCBidWlsdCB3aXRoIEhUVFAgZGlzYWJsZWQ6CgogIDEpIHRoZSBwcm94eSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIHN0aWxsIHJlYWQgYW5kIHVzZWQgdG8gc2V0IEhUVFAgcHJveHkKCiAgMikgeW91IGNvdWxkbid0IGRpc2FibGUgaHR0cCBwcm94eSB3aXRoIENVUkxPUFRfUFJPWFkgKHNpbmNlIHRoZSBvcHRpb24gd2FzCiAgICAgZGlzYWJsZWQpLiBUaGlzIGlzIGltcG9ydGFudCBzaW5jZSBhcHBzIG1heSB3YW50IHRvIGRpc2FibGUgSFRUUCBwcm94eQogICAgIHdpdGhvdXQgYWN0dWFsbHkga25vd2luZyBpZiBsaWJjdXJsIHdhcyBidWlsdCB0byBkaXNhYmxlIEhUVFAgb3Igbm90LgoKICBCYXNlZCBvbiBTdGVwaGFuJ3MgcGF0Y2gsIGJvdGggdGhlc2UgaXNzdWVzIHNob3VsZCBub3cgYmUgZml4ZWQuCgpEYW5pZWwgKDE4IEphbnVhcnkgMjAwNSkKLSBDb2R5IEpvbmVzJyBlbmhhbmNlZCB2ZXJzaW9uIG9mIFNhbXVlbCBE7WF6IEdhcmPtYSdzIE1TVkMgbWFrZWZpbGUgcGF0Y2ggd2FzCiAgYXBwbGllZC4KCkRhbmllbCAoMTYgSmFudWFyeSAyMDA1KQotIEFsZXggYWthIFdpbmRFYWdsZSBwb2ludGVkIG91dCB0aGF0IHdoZW4gZG9pbmcgImN1cmwgLXYgZGljdGlvbmFyeS5jb20iLCBjdXJsCiAgYXNzdW1lZCB0aGlzIHVzZWQgdGhlIERJQ1QgcHJvdG9jb2wuIFdoaWxlIGd1ZXNzaW5nIHByb3RvY29scyB3aWxsIHJlbWFpbgogIGZ1enp5LCBJJ3ZlIG5vdyBtYWRlIHN1cmUgdGhhdCB0aGUgaG9zdCBuYW1lcyBtdXN0IHN0YXJ0IHdpdGggIltwcm90b2NvbF0uIgogIGZvciB0aGVtIHRvIGJlIGEgdmFsaWQgZ3Vlc3NhYmxlIG5hbWUuIEkgYWxzbyByZW1vdmVkICJodHRwcyIgYXMgYSBwcmVmaXgKICB0aGF0IGluZGljYXRlcyBIVFRQUywgc2luY2Ugd2UgaGFyZGx5IGV2ZXIgc2VlIGFueSBob3N0IG5hbWVzIHVzaW5nIHRoYXQuCgpEYW5pZWwgKDEzIEphbnVhcnkgMjAwNSkKLSBJbnNwaXJlZCBieSBNYXJ0aWpuIEtvc3RlcidzIHBhdGNoIGFuZCBleGFtcGxlIHNvdXJjZSBhdAogIGh0dHA6Ly93d3cuZ3JlZW5oaWxscy5jby51ay9tYWsvZ2VudG9vL2N1cmwtZWludHItYnVnLmMsIEkgbm93IG1hZGUgdGhlCiAgc2VsZWN0KCkgYW5kIHBvbGwoKSBjYWxscyBwcm9wZXJseSBsb29wIGlmIHRoZXkgcmV0dXJuIC0xIGFuZCBlcnJubyBpcwogIEVJTlRSLiBnbGliYyBkb2NzIGZvciB0aGlzIGlzIGZvdW5kIGhlcmU6CiAgaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2xpYmMvbWFudWFsL2h0bWxfbm9kZS9JbnRlcnJ1cHRlZC1QcmltaXRpdmVzLmh0bWwKCiAgVGhpcyBsYXN0IGxpbmsgc2F5cyBCU0QgZG9lc24ndCBoYXZlIHRoaXMgImVmZmVjdCIuIFdpbGwgdGhlcmUgYmUgYSBwcm9ibGVtCiAgaWYgd2UgZG8gdGhpcyB1bmNvbmRpdGlvbmFsbHk/CgpEYW5pZWwgKDExIEphbnVhcnkgMjAwNSkKLSBEYW4gVG9yb3AgY2xlYW5lZCB1cCBhIGZldyBubyBsb25nZXIgdXNlZCB2YXJpYWJsZXMgZnJvbSBEYXZpZCBQaGlsbGlwcycKICBzZWxlY3QoKSBvdmVyaGF1bCBmaXguCgotIEN5cmlsbCBPc3RlcndhbGRlciBwb3N0ZWQgYSBkZXRhaWxlZCBhbmFseXNpcyBhYm91dCBhIGJ1ZyB0aGF0IG9jY3VycyB3aGVuCiAgdXNpbmcgYSBjdXN0b20gSG9zdDogaGVhZGVyIGFuZCBjdXJsIGZhaWxzIHRvIHNlbmQgYSByZXF1ZXN0IG9uIGEgcmUtdXNlZAogIHBlcnNpc3RlbnQgY29ubmVjdGlvbiBhbmQgdGh1cyBjcmVhdGVzIGEgbmV3IGNvbm5lY3Rpb24gYW5kIHJlc2VuZHMgaXQuIEl0CiAgdGhlbiBzZW50IHR3byBIb3N0OiBoZWFkZXJzLiBDeXJpbGwncyBhbmFseXNpcyB3YXMgcG9zdGVkIGhlcmU6CiAgaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsL2FyY2hpdmUtMjAwNS0wMS8wMDIyLmh0bWwKCi0gQnJ1Y2UgTWl0Y2hlbmVyIGlkZW50aWZpZWQgKGJ1ZyByZXBvcnQgIzEwOTk2NDApIHRoZSBuZXZlci1lbmRpbmcgU09DS1M1CiAgcHJvYmxlbSB3aXRoIHRoZSB2ZXJzaW9uIGJ5dGUgYW5kIHRoZSBjaGVjayBmb3IgYmFkIHZlcnNpb25zLiBCcnVjZSBoYXMgbG90cwogIG9mIGNsdWVzIG9uIHRoaXMsIGFuZCBiYXNlZCBvbiBoaXMgc3VnZ2VzdGlvbiBJJ3ZlIG5vdyByZW1vdmVkIHRoZSBjaGVjayBvZgogIHRoYXQgYnl0ZSBzaW5jZSBpdCBzZWVtcyB0byBiZSBhYmxlIHRvIGNvbnRhaW4gMSBvciA1LgoKRGFuaWVsICgxMCBKYW51YXJ5IDIwMDUpCi0gUGF2ZWwgT3JlaG92IHJlcG9ydGVkIG1lbW9yeSBwcm9ibGVtcyB3aXRoIHRoZSBtdWx0aSBpbnRlcmZhY2UgaW4gYnVnIHJlcG9ydAogICMxMDk4ODQzLiBJbiBzaG9ydCwgYSBzaGFyZWQgRE5TIGNhY2hlIHdhcyBzZXR1cCBmb3IgYSBtdWx0aSBoYW5kbGUgYW5kIHdoZW4KICB0aGUgc2hhcmVkIGNhY2hlIHdhcyBkZWxldGVkIGJlZm9yZSB0aGUgaW5kaXZpZHVhbCBlYXN5IGhhbmRsZXMsIHRoZSBsYXR0ZXIKICBjbGVhbnVwcyBjYXVzZWQgcmVhZC93cml0ZXMgdG8gYWxyZWFkeSBmcmVlZCBtZW1vcnkuCgotIEh6aGlqdW4gcmVwb3J0ZWQgYSBtZW1vcnkgbGVhayBpbiB0aGUgU1NMIGNlcnRpZmljYXRlIGNvZGUsIHRoYXQgbGVha2VkIHRoZQogIHJlbW90ZSBjZXJ0aWZpY2F0ZSBuYW1lIHdoZW4gaXQgZGlkbid0IG1hdGNoIHRoZSB1c2VkIGhvc3QgbmFtZS4KCkdpc2xlICg4IEphbnVhcnkgMjAwNSkKLSBBZGRlZCBNYWtlZmlsZS5XYXRjb20gZmlsZXMgKHNyYy9saWIpLiBVcGRhdGVkIE1ha2VmaWxlLmRpc3QuCgpEYW5pZWwgKDcgSmFudWFyeSAyMDA1KQotIEltcHJvdmVkIHRoZSB0ZXN0IHNjcmlwdCdzIHZhbGdyaW5kIGxvZyBwYXJzZXIgdG8gYWN0dWFsbHkgd29yayEgQWxzbyBhZGRlZAogIHRoZSBhYmlsaXR5IHRvIGRpc2FibGUgdGhlIGxvZyBzY2FubmVyIGZvciBzcGVjaWZpYyB0ZXN0IGNhc2VzLiBUZXN0IGNhc2UKICA1MDkgcmVzdWx0cyBpbiBudW1lcm91cyBwcm9ibGVtcyBhbmQgbGVha3MgaW4gT3BlblNTTCBhbmQgaGFzIHRvIGdldCBpdAogIGRpc2FibGVkLgoKRGFuaWVsICg2IEphbnVhcnkgMjAwNSkKLSBGaXhlZCBhIHNpbmdsZS1ieXRlIHJlYWQgb3V0IG9mIGJvdW5kcyBpbiB0ZXN0IGNhc2UgMzkgaW4gdGhlIGN1cmwgdG9vbCBjb2RlCiAgKGkuZSBub3QgaW4gdGhlIGxpYnJhcnkpLgoKLSBCdWcgcmVwb3J0ICMxMDk3MDE5IGlkZW50aWZpZWQgYSBwcm9ibGVtIHdoZW4gZG9pbmcgLWQgImRhdGEiIHdpdGggLUcgYW5kCiAgc2VuZGluZyBpdCB0byB0d28gVVJMcyB3aXRoIHt9LiBBZGRlZCB0ZXN0IDE5OSB0byB2ZXJpZnkgdGhlIGZpeC4KCkRhbmllbCAoNCBKYW51YXJ5IDIwMDUpCi0gTWFydHkgS3VocnQgYWRqdXN0ZWQgYSBWTVMgYnVpbGQgc2NyaXB0IHNsaWdodGx5CgotIEthaSBTb21tZXJmZWxkIGFuZCBHaXNsZSBWYW5lbSBmaXhlZCBsaWJjdXJsIHRvIGJ1aWxkIHdpdGggSVB2NiBzdXBwb3J0IG9uCiAgV2luMjAwMC4KCkRhbmllbCAoMiBKYW51YXJ5IDIwMDUpCi0gQWxleCBOZWJsZXR0IHVwZGF0ZWQgdGhlIE1TVkMgbWFrZWZpbGVzIHNsaWdodGx5Lgo=