Q3VybCBhbmQgbGliY3VybCA3LjEwLjguIEEgYnVnZml4IHJlbGVhc2UuCgpUaGUgNzd0aCBwdWJsaWMgY3VybCByZWxlYXNlLiBSZWxlYXNlIG51bWJlciAxMDQgY291bnRlZCBmcm9tIHRoZSB2ZXJ5CmJlZ2lubmluZy4KClRoaXMgcmVsZWFzZSBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIGNoYW5nZXM6CgogbyAtLWhlYWQgbm93IHdvcmtzIG9uIGZpbGU6Ly8gVVJMcyB0b28KIG8gZmlsZTogVVJMcyB3aXRoIG9ubHkgb25lIGluaXRpYWwgc2xhc2ggbm93IHdvcmtzIHRvbwogbyBSRUxFQVNFLU5PVEVTIGRvY3VtZW50IGFkZGVkIHRvIHRoZSByZWxlYXNlIGFyY2hpdmUgdG8gc3VtbWFyaXplIHRoZSBiaWcKICAgYW5kIHZpc2libGUgY2hhbmdlcyBhbmQgYnVnZml4ZXMKIG8gQ1VSTE9QVF9NQVhGSUxFU0laRSB3YXMgYWRkZWQsIGFuZCAtLW1heC1maWxlc2l6ZQogbyBDVVJMT1BUX1BBU1NXREZVTkNUSU9OIGFuZCBDVVJMT1BUX1BBU1NXRERBVEEgYXJlIG5vIGxvbmdlciBzdXBwb3J0ZWQKIG8gSVB2NiBpcyBub3cgc3VwcG9ydGVkIG9uIFdpbmRvd3MgYnVpbGRzIHRvbwogbyBDVVJMT1BUX0lQUkVTT0xWRSBsZXRzIHlvdSBzZWxlY3QgcHVyZSBJUHY2IG9yIElQdjQgcmVzb2x2ZWQgYWRkcmVzc2VzCiAgIChjdXJsIG9mZmVycyB0aGUgY29tbWFuZCBsaW5lIG9wdGlvbnMgLTQvLS1pcHY0IGFuZCAtNi8tLWlwdjYpCiBvIEdTUy1OZWdvdGlhdGUgd29ya3MgZmluZSB3aXRoIHRoZSBNSVQga2VyYmVyb3MgbGlicmFyeQogbyBTUE5FR08gc3VwcG9ydCBhZGRlZCwgaWYgbGliY3VybCBpcyBidWlsdCB3aXRoIHRoZSBGQm9wZW5zc2wgbGlicmFyaWVzLAogICBjdXJsX3ZlcnNpb25faW5mbygpIGNhbiByZXR1cm4gYSBmZWF0dXJlIGJpdCBmb3IgaXQgYW5kIGN1cmwgLVYgZGlzcGxheXMKICAgU1BORUdPIGFzIGEgZmVhdHVyZSBpZiBsaWJjdXJsIGlzIGJ1aWx0IHdpdGggaXQgZW5hYmxlZAogbyBlYXN5IGhhbmRsZXMgYWRkZWQgdG8gYSBtdWx0aSBoYW5kbGUgbm93IHNoYXJlIEROUyBjYWNoZSBhdXRvbWF0aWNseQogbyBDVVJMSU5GT19IVFRQQVVUSF9BVkFJTCBhbmQgQ1VSTElORk9fUFJPWFlBVVRIX0FWQUlMIHdlcmUgYWRkZWQKIG8gQ1VSTE9QVF9GVFBfUkVTUE9OU0VfVElNRU9VVCB3YXMgYWRkZWQKIG8gTlRMTSwgRGlnZXN0IGFuZCBHU1MtTmVnb3RpYXRlIGF1dGhlbnRpY2F0aW9ucyBhbHNvIHdvcmsgZm9yIEhUVFBTIG92ZXIKICAgcHJveGllcwogbyBjdXJsIHN1cHBvcnRzIG11bHRpcGxlIC1UIGZsYWdzIHRvIGFsbG93IHNlcnZlcmFsIHVwbG9hZGVkIGZpbGVzIHVzaW5nCiAgIGEgc2luZ2xlIGNvbW1hbmQgbGluZQogbyBDVVJMSU5GT19SRVNQT05TRV9DT0RFIGNhbiByZXR1cm4gdGhlIGxhc3QgRlRQIHJlc3BvbnNlIGNvZGUKClRoaXMgcmVsZWFzZSBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIGJ1Z2ZpeGVzOgoKIG8gYWRkZWQgd29yay1hcm91bmQgZm9yIGEgbmFtZSByZXNvbHZlIHByb2JsZW0gb24gc29tZSBnbGliYyB2ZXJzaW9ucwogbyBhIHJhcmUgRVJST1JCVUZGRVIgc2luZ2xlLWJ5dGUgb3ZlcmZsb3cgd2FzIGZpeGVkCiBvIEhUVFAtcmVzdW1pbmcgYW4gYWxyZWFkeSBkb3dubG9hZGVkIGZpbGUgd29ya3MgYmV0dGVyCiBvIGJ1aWxkcyBiZXR0ZXIgb24gU29sYXJpcyA4KyB3aXRoIGdjYwogbyAtLWRpc2FibGUtZXBydCB3b3JrcyBub3cKIG8gaW1wcm92ZWQgQ0EgY2VydCB2ZXJpZmljYXRpb24KIG8gLS1hbnlhdXRoIGNvdWxkIGJ1ZyB3aGVuIHRoZSBmaXJzdCByZXNwb25zZSBoYWQgbm8gYm9keSBjb250ZW50cwogbyBkb3VibGUgcGFzc3dvcmQgcHJvbXB0aW5nIHdoZW4gZG9pbmcgTlRMTSBmaXhlZAogbyBpbXByb3ZlZCBwZXJmb3JtYW5jZSB3aGVuIHVzZWQgbXVsdGktdGhyZWFkZWQgb24gd2luZG93cwogbyBzaGFyZS1sb2NraW5nIGR1cmluZyBETlMgbG9va3VwcyB3YXMgbW9kaWZpZWQKIG8gcmVzdW1lIHdhcyBub3QgcG9zc2libGUgdG8gc3dpdGNoIG9mZiBwcm9wZXJseSBvbmNlIGVuYWJsZWQKIG8gZml4ZWQgdGhlIGlwdjQgY29ubmVjdCBjb2RlIHdoZW4gYSBETlMgZW50cnkgaGFzIG11bHRpcGxlIElQcwogbyBub3cgY2hlY2tzIHN1YmplY3RBbHROYW1lcyB3aGVuIG1hdGNoaW5nIGNlcnRzCiBvIEhUVFAgUE9TVCB1c2luZyByZWFkIGNhbGxiYWNrIHdvcmtzIGFnYWluCiBvIGJ1aWxkcyBmaW5lIG9uIEJlT1Mgbm93CiBvIENVUkxPUFRfQ09PS0lFIHNldCB0byBOVUxMIG5vIGxvbmdlciBzZW5kcyB0aGUgcHJldmlvdXNseSBzZXQgY29va2llCiBvIGlmIGFuIEZUUCB0cmFuc2ZlciB1c2VkIGEgYmFkIHBhdGgsIHRoZSBuZXh0IHRyYW5zZmVyIGNvdWxkIGZhaWwgdG9vCiBvIGFyZXMtYnVpbHQgbGliY3VybCByZXNvbHZlcyBJUC1vbmx5IG5hbWVzIHByb3Blcmx5CiBvIGNoYW5nZWQgdGhlIGN1cmxfbG9ja19mdW5jdGlvbiBwcm90byB0byBwcmV2ZW50IHdhcm5pbmdzIG9uIHNvbWUgY29tcGlsZXJzCiBvIGJ1aWxkcyBmaW5lIG9uIFFOWCA2LjIueCBub3cKIG8gUFVUIHdpdGggLS1kaWdlc3Qgd29ya3Mgbm93IAogbyAtLWFueWF1dGggdGhhdCBwaWNrcyBOVExNIGFuZCB0aGVuIGZvbGxvd3MgYSByZWRpcmVjdCAoYW5kIGRvZXMgTlRMTSBhZ2FpbikKICAgd29ya3Mgbm93CiBvIGFzeW5jaCByZXNvbHZlcyBub3cgd29yayBvbiBOVDQgdG9vCiBvIGEgRE5TIGNhY2hlIHRyYXNoIChwb3NzaWJsZSBzZWdmYXVsdCkgd2FzIGZpeGVkCiBvIHJ1bnRlc3RzLnBsIGNsZWFycyBhbGwgcHJveHkgZW52aXJvbm1lbnQgdmFyaWFibGVzIGJlZm9yZSB0aGUgdGVzdCBpcyBydW4KIG8gTWljcm9zb2Z0J3MgIk5lZ290aWF0ZSIgYXV0aGVudGljYXRpb24gaXMgbm93IHN1cHBvcnRlZCBieSB0aGUgZXhpc3RpbmcKICAgR1NTTkVHT1RJQVRFIG9wdGlvbgogbyBBIHNldCB6ZXJvLWxlbmd0aCBwcm94eSBuYW1lIGNvbmZ1c2VkIGxpYmN1cmwKIG8gRGlnZXN0IGF1dGhlbnRpY2F0aW9uIHdvcmtzIGFnYWluIHdpdGhvdXQgT3BlblNTTCBvbiA2NGJpdCBhcmNoaXRlY3R1cmVzCiBvIGNvbmZpZ3VyZSAtLWVuYWJsZS10aHJlYWQgd29ya3Mgbm93CiBvIGJ1ZmZlciBwcm9ibGVtcyBpbiB0aGUgdGVzdCBzdWl0ZSdzIHdlYiBzZXJ2ZXIgd2VyZSBmaXhlZAogbyBpbXByb3ZlZCBwcm94eSBwYXNzd29yZCBoYW5kbGluZwogbyBMREFQIGlzIGFnYWluIHdvcmtpbmcgbmljZWx5IHdpdGggdGhlIGN1cnJlbnQgT3BlbkxEQVAKIG8gYXN5bmNoIG5hbWUgbG9va3VwIGZvciBub24tcmVzb2x2aW5nIGhvc3RzIG5vdyByZXR1cm4gYSBwcm9wZXIgZXJyb3IgbWVzc2FnZQogbyBDVVJMT1BUX1NTTF9WRVJJRllIT1NUIHNldCB0byAxIG5vIGxvbmdlciBhYm9ydHMgaWYgbm8gQ04gZmllbGQgaXMKICAgb2J0YWluYWJsZSwgaXQgd2lsbCBtZXJlbHkgd2FybiBhYm91dCBpdAogbyBuYW1lIHJlc29sdmUgc2VnZmF1bHQgd2l0aCB1Q2xpYmMgZml4ZWQKIG8gbXVsdGkgaW50ZXJmYWNlIGFuZCBtdWx0aS1wYXJ0L2Zvcm1wb3N0IGNvdWxkIGVuZCBpbiBzZWdmYXVsdAogbyBjdXJsX211bHRpX2luZm9fcmVhZCgpIHNldHMgdGhlIG1zZ3NfaW5fcXVldWUgdG8gMCB3aGVuIHJldHVybmluZyBOVUxMCiBvIG11bHRpIGludGVyZmFjZSwgYXJlcyBhbmQgbm9uLXJlc29sdmluZyBob3N0IGNhdXNlZCBhIHNlZ2ZhdWx0CiBvIG1pbm9yIHNpbmdsZSBTU0wgbWVtb3J5IGxlYWsgZml4ZWQKIG8gU2V0dGluZyBDVVJMT1BUX1dSSVRFRlVOQ1RJT04gb3IgQ1VSTE9QVF9SRUFERlVOQ1RJT04gdG8gTlVMTCByZXNldHMgdGhlbQogICB0byBkZWZhdWx0CgpPdGhlciBjdXJsLXJlbGF0ZWQgbmV3cyBzaW5jZSB0aGUgcHJldmlvdXMgcHVibGljIHJlbGVhc2U6CgogbyBUY2xDdXJsIDAuMTAuNyB3YXMgcmVsZWFzZWQuCgpUaGlzIHJlbGVhc2Ugd291bGQgbm90IGhhdmUgbG9va2VkIGxpa2UgdGhpcyB3aXRob3V0IGhlbHAsIGNvZGUsIHJlcG9ydHMgYW5kCmFkdmljZSBmcm9tIGZyaWVuZHMgbGlrZSB0aGVzZToKCiBMb3JlbiBLaXJrYnksIEplZmYgUG9obG1leWVyLCBBbnRvaW5lIENhbGFuZG8sIEdlcmQgdi4gRWdpZHksIFZpbmNlbnQKIFNhbmRlcnMsIEpvaG4gTWNHb3dhbiwgSGVucmlrIFN0b3JuZXIsIEr2cmcgTXVlbGxlci1Ub2xrLCBQZXRlciBQZW50Y2hldiwKIEVhcmx5IEVobGluZ2VyLCBLZXZpbiBGaXNrLCBKdXJpaiBTbWFrb3YsIEJqb3JuIFJlZXNlLCBUaW0gQmFydGxleSwgRGF2aWQKIEtpbWRvbiwgRG9taW5pY2sgTWVnbGlvLCBNYXJrdXMgTW9lbGxlciwgR2l1c2VwcGUgQXR0YXJkaSwgSmFtZXMgTWFjTWlsbGFuLAogTmVpbCBTcHJpbmcsIFNpZGRoYXJ0aGEgUHJha2FzaCBKYWluLCBKb24gVHVybmVyLCBWaW5jZW50IEJyb25uZXIsIFNoYXJkLAogSmVyZW15IEZyaWVzbmVyLCBGbG9yaWFuIFNjaG9wcG1hbm4sIE5laWwgRHVuYmFyLCBGcmFuayBUaWNoZWxlciwgTGFjaGxhbgogTydEZWEsIERpcmsgTWFuc2tlLCBEb21lbmljbyBBbmRyZW9saSwgR2lzbGUgVmFuZW0sIEtpbW1vIEtpbm51bmVuLCBBbmRyZXcKIEZ1bGxlciwgR2VvcmcgSG9ybiwgQW5kculzIEdhcmPtYSwgRHlsYW4gRWxsaWNvdHQsIEtldmluIFJvdGgsIERhdmlkIEh1bGwsCiBKYW1lcyBCdXJzYSwgRGFuIEMKIAogICAgICAgIFRoYW5rcyEgKGFuZCBzb3JyeSBpZiBJIGZvcmdvdCB0byBtZW50aW9uIHNvbWVvbmUpCg==